我有两个相邻的UIScrollViews,它们都被一个带有轻击手势识别器的UIButton部分覆盖。它们按此顺序添加到视图中:
两个滚动视图都是z定位"后面"按钮,但按钮不会接收与较新的滚动视图重叠的点击。
有没有办法可以声明"让这个按钮成为水龙头最顶级的接收器"?
编辑:下面是视图的模型。按钮的红色部分是添加了scrollview 2后停止接收的区域。
答案 0 :(得分:1)
我建议按钮没有正确放置在右侧滚动视图上方。我知道您已经设置了zPosition,但是您应该尝试使用以下按钮将按钮置于前面(并将两个滚动视图发送到后面):
[self.view bringSubviewToFront:button];
[self.view sendSubviewToBack:scrollView1];
[self.view sendSubviewToBack:scrollView2];
如果按钮位于视图排序的顶部,则应该首先接收触摸事件。
如果失败了,UIScrollView的手势识别器与UIButton的手势识别器发生冲突可能是一个问题。尝试实现以下内容以确保其后面的UIButton和UIScrollView都从其手势识别器接收触摸事件:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
上述UIGestureRecognizerDelegate方法的默认返回值为NO
,这可以解释为什么按钮没有接收到触摸事件。您可以查看有关此方法和其他委托方法here的更多信息。
这应确保所有手势识别器都能识别其视图中的触摸。
希望这有帮助!
答案 1 :(得分:0)
我会在没有编写大量代码的情况下为您提供解决方案。
我相信你的视图层次结构是这样的:( z-index ordered)
superview
scrollview1
scrollview2
button
你的按钮虽然位于卷轴上方,但是与滚动视图共享相同的超级视图...而不是这样做,如何将按钮和滚动视图分开放在另一个容器上?
superview
scroll_container
scrollview1
scrollview2
button
而且,为什么你要把手势识别器附加到UIButton上?您只需使用以下选项将选择器添加到按钮:
[button addTarget:yourObject action:@selector(yourMethod:) forControlEvents:UIControlEventTouchUpInside];
也许这是你按钮的问题,而不是z-index ......
尝试两种方式,让我们知道结果。