嵌套在视图中的iOS按钮无法接收触摸



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

连接到视图控制器的主视图的是敲击手势识别器。我发现我需要检查[触摸视图],看看它是否是一个按钮或任何其他我不希望手势识别器解释的控件,并从返回NO值

  • (BOOL)手势识别器:(UIGestureRecognizer*)手势识别程序应接收触摸:(UITouch*)触摸

委托方法(如果它是这些控件中的一个)。

因此,在这个容器视图中是另一个子视图(UIView),在那个子视图中是一个按钮。视图控制器是导航控制器堆栈的一部分,当它被简单地表示为导航控制器时,一切都很好。

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

如果我按住按钮一秒钟左右,它就会识别出按钮,并将消息转发给该按钮。

对此有什么想法吗?我可以发布代码,只是还不确定发布什么。。。

按钮是否超出了包含视图的范围?如果未设置clipseToBounds,按钮仍将出现,但由于它在其超视图的边界之外,因此不会对触摸做出响应。

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

每当我有很多嵌套视图时,我都会发现最简单的方法是(暂时)将每个视图的backgroundColor设置为不同的颜色。这样,我就可以准确地看到每个视图的边界在哪里,它们是如何嵌套的,以及什么与什么重叠。

最新更新