iOS按钮嵌套在未接触触摸的视图中

mic*_*ckm 1 view button gesture ios

我有一个包含滚动视图的视图控制器,它占用了整个可用窗口.有一个UIView,我用它作为容器视图,它是scrollview的子视图,包含所有其他视图和控件.视图控制器初始化时有很多配置,根据来自Web服务的数据,将显示哪些视图和控件.

附加到视图控制器的主视图的是轻击手势识别器.我发现我需要检查[触摸视图]以查看它是一个按钮还是我不希望手势识别器解释的任何其他控件,并从中传递一个NO值

  • (BOOL)gestureRecognizer :( UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch

委托方法,如果它是这些控件之一.

所以在这个容器视图中是另一个(UIView)子视图,在该子视图中是一个按钮.视图控制器是导航控制器堆栈的一部分,当它仅作为导航控制器呈现时,一切运行良好.

当导航控制器从标签栏的一个标签显示时,当我点击按钮时,它无法识别该按钮上的点击.当我打破上面的委托方法时,[触摸视图]是一个UIView,而不是UIButton.

如果我按住按钮一秒左右,则它会识别按钮,并将消息转发给按钮.

有什么想法吗?我可以发布代码,只是不知道发布什么...

Jef*_*lin 6

也许按钮超出其包含视图的范围?如果未设置clipsToBounds,则仍会显示该按钮,但由于它超出了其超级视图的范围,因此不会响应触摸.

另一种可能性是另一个视图与按钮重叠.如果重叠视图具有透明背景,您将无法看到它重叠的位置,但可能会从其下方的视图中窃取触摸事件.

每当我有很多嵌套视图时,我发现最简单的方法是查看(暂时)将每个视图的backgroundColor设置为不同的颜色.通过这种方式,我可以准确地看到每个视图的边界位置,嵌套方式以及重叠的内容.