在 UIButton 下添加 UIScrollView 后失去点击识别
Losing tap recognition after adding a UIScrollView under a UIButton
我有两个相邻的 UIScrollView,它们都被带有点击手势识别器的 UIButton 部分覆盖。它们按以下顺序添加到视图中:
- 滚动视图 #1
- 按钮
- 滚动视图 #2(由用户交互添加)
按钮的两个滚动视图都是 "behind" z 定位的,但是按钮在与较新的滚动视图重叠的地方不会收到点击。
有什么方法可以申报 "keep this button the topmost receiver of taps"?
编辑:下面是视图的模型。按钮的红色部分是添加scrollview 2后停止接受点击的区域
不用写很多代码我给你一个解决方案
我相信您的视图层次结构是这样的:(z-index 已排序)
superview
scrollview1
scrollview2
button
虽然您的按钮位于滚动条上方,但与滚动视图共享相同的超级视图...而不是这样做,将按钮和滚动视图分开在不同的容器中怎么样?
superview
scroll_container
scrollview1
scrollview2
button
而且,如果 UIButton 已经有手势识别器,为什么还要附加它?您只需要使用以下方法将选择器添加到按钮:
[button addTarget:yourObject action:@selector(yourMethod:) forControlEvents:UIControlEventTouchUpInside];
可能是你的按钮有问题,而不是 z-index ...
两种都试试,然后告诉我们结果。
我建议按钮没有正确放置在右滚动视图上方。我知道您已经设置了 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 方法的默认 return 值为 NO
,这可以解释为什么按钮没有接收到触摸事件。您可以查看有关此方法和其他委托方法的更多信息 here。
这应确保所有手势识别器都在其视图中识别触摸。
希望对您有所帮助!
我有两个相邻的 UIScrollView,它们都被带有点击手势识别器的 UIButton 部分覆盖。它们按以下顺序添加到视图中:
- 滚动视图 #1
- 按钮
- 滚动视图 #2(由用户交互添加)
按钮的两个滚动视图都是 "behind" z 定位的,但是按钮在与较新的滚动视图重叠的地方不会收到点击。
有什么方法可以申报 "keep this button the topmost receiver of taps"?
编辑:下面是视图的模型。按钮的红色部分是添加scrollview 2后停止接受点击的区域
不用写很多代码我给你一个解决方案
我相信您的视图层次结构是这样的:(z-index 已排序)
superview
scrollview1
scrollview2
button
虽然您的按钮位于滚动条上方,但与滚动视图共享相同的超级视图...而不是这样做,将按钮和滚动视图分开在不同的容器中怎么样?
superview
scroll_container
scrollview1
scrollview2
button
而且,如果 UIButton 已经有手势识别器,为什么还要附加它?您只需要使用以下方法将选择器添加到按钮:
[button addTarget:yourObject action:@selector(yourMethod:) forControlEvents:UIControlEventTouchUpInside];
可能是你的按钮有问题,而不是 z-index ...
两种都试试,然后告诉我们结果。
我建议按钮没有正确放置在右滚动视图上方。我知道您已经设置了 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 方法的默认 return 值为 NO
,这可以解释为什么按钮没有接收到触摸事件。您可以查看有关此方法和其他委托方法的更多信息 here。
这应确保所有手势识别器都在其视图中识别触摸。
希望对您有所帮助!