UIButton将忽略“拖动”并将其传递给UIScrollView
我知道Stack上有类似的帖子,但是我找到的没有帮我找到解决方案。
我已经将UIButton添加到scrollview上方的相同UIView中 。
我知道如何通过hitTest传递返回scrollview,但这阻止了任何进入UIButton。
我不想给UIButton的加入到UIScrollView的。
有没有人有建议的解决方案?
正如在这个答案中所解释的,一个UIButton或其他UIControl是滚动视图的子视图,它将自动响应点击,同时让滚动视图处理拖动。 然而,作为滚动视图的子视图的按钮也将随滚动内容一起移动,而不是保持在屏幕上的相同位置,因为内容在它们下面滚动。 我认为这就是为什么你不想把按钮放到滚动视图中。
如果是这样的话,你可以通过一步来获得所需的行为。 将所有按钮放入作为滚动视图的子视图的UIView中,然后在滚动视图委托的scrollViewDidScroll方法中,将该视图的frame.origin设置为滚动视图的contentOffset。 我刚刚在我的应用中实现了这个功能,并且它工作得很好,无需做任何子类化或参与响应者链或触摸事件。
尝试这个:
实际上,你会欺骗滚动视图,认为该按钮是其子视图之一。 我不确定这会起作用,因为我没有真正尝试过,但它看起来完全合理。
尝试添加一个UIPanGestureRecognizer
到UIBUtton
。 在您指定处理平移(拖动)的回调中,您无需执行任何操作。 然后,将cancelsTouchesInView
设置为YES。 这将导致您的按钮将拖动手势传递给其他视图。
UIPanGestureRecognizer *gr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan)]; [gr setCancelsTouchesInView:YES]; [myButton addGestureRecognizer:gr]; [gr release];
这里是handlePan
:
-(void)handlePan { // Do nothing }
我遇到了类似的情况,我有一个UIScrollView
与两个UIView
子视图。 每个UIView
包含一个UISlider
。 我想要捕捉(并放下)垂直拖动(这是手势识别器进入的地方),但我还需要水平滚动以像预期的那样在滑动条中工作,并左右平移滚动视图。 这是解决方案。 (手势识别器连接到每个UIView
。)
上一篇: UIButton that will ignore a 'drag' and pass it to UIScrollView
下一篇: Extremely weird IE7/8 border/opacity compatibility issue