嵌套在 View 中的 iOS 按钮未接收到触摸

标签 ios button view gesture

我有一个包含 ScrollView 的 View Controller ,它占据了整个可用窗口。有一个 UIView 我用作容器 View ,它是 ScrollView 的 subview ,包含所有其他 View 和控件。初始化 View Controller 时有很多配置,关于将显示哪些 View 和控件,取决于来自 Web 服务的数据。

附加到 View Controller 的主视图的是一个轻击手势识别器。我发现我需要检查 [touch view] 以查看它是按钮还是我不希望手势识别器解释的任何其他控件,并从

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

  • 如果是这些控件中的一个,则委托(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/

    相关文章:

    ios - CocoaPods UIImageView+AFNetworking.h 无法识别的选择器 setImageWithURLRequest

    jquery - 不能按 ID 选择对象,只能用 jQuery 按类选择对象?

    google-maps - 在谷歌地图上放一个按钮

    java - 是否可以使用 view inflator 给单个元素充气?

    android - View 在模拟器和设备上呈现得非常慢

    ios - 单击提交按钮后如何在其正下方显示隐藏部分?

    ios - 如何在所有不同屏幕尺寸的设备上彻底测试 iOS 应用程序?

    iphone - 使用 CLLocationManager 的正确方法(开始/停止更新用户位置)

    ios - 如果所有文本字段都在ios中填写,则启用按钮

    python - 如何使用 View (numpy)将二维数组转换为结构化数组?