我有一个包含 ScrollView 的 View Controller ,它占据了整个可用窗口。有一个 UIView 我用作容器 View ,它是 ScrollView 的 subview ,包含所有其他 View 和控件。初始化 View Controller 时有很多配置,关于将显示哪些 View 和控件,取决于来自 Web 服务的数据。
附加到 View Controller 的主视图的是一个轻击手势识别器。我发现我需要检查 [touch view] 以查看它是按钮还是我不希望手势识别器解释的任何其他控件,并从
如果是这些控件中的一个,则委托(delegate)方法。
所以在这个容器 View 中是另一个(UIView) subview ,在那个 subview 中是一个按钮。 View Controller 是导航 Controller 堆栈的一部分,当它被简单地呈现为导航 Controller 时,一切都很好。
当从选项卡栏的一个选项卡显示导航 Controller 时,当我点击该按钮时,它无法识别该按钮上的点击。当我中断上面的委托(delegate)方法时,[touch view] 是 UIView,而不是 UIButton。
如果我点击并按住按钮一秒钟左右,那么它确实会识别该按钮,并将消息转发到该按钮。
对此有什么想法吗?我可以发布代码,只是不确定要发布什么......
最佳答案
也许按钮超出了其包含 View 的范围?如果 clipsToBounds 没有设置,按钮仍然会出现,但由于它在其父 View 的边界之外,它不会响应触摸。
另一种可能性是另一个 View 与按钮重叠。如果重叠 View 具有透明背景,您将无法看到它重叠的位置,但它可能会从其下方的 View 中窃取触摸事件。
每当我有很多嵌套 View 时,我发现查看正在发生的事情的最简单方法是(暂时)将每个 View 的 backgroundColor 设置为不同的颜色。这样我就可以准确地看到每个 View 的边界在哪里,它们是如何嵌套的,以及什么重叠了什么。
关于嵌套在 View 中的 iOS 按钮未接收到触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21891520/