为什么 UINavigationBar 会窃取触摸事件?

2024-02-24

我有一个自定义 UIButton,其中 UILabel 添加为子视图。仅当我触摸顶部边界下方约 15 个点时,按钮才会执行给定的选择器。当我点击该区域上方时,什么也没有发生。

我发现这并不是由错误创建按钮和标签引起的,因为在我将按钮向下移动约 15 px 后,它可以正常工作。

UPDATE我忘了说位于 UINavigationBar 下方的按钮和按钮上部的 1/3 不会收到触摸事件。

图片在这里 http://www.picamatic.com/show/2012/03/13/09/59/8282746_640x130.png

带有 4 个按钮的视图位于导航栏下方。当触摸顶部的“篮球”时,后退按钮获得触摸事件,当触摸顶部的“钢琴”时,右栏按钮(如果存在)获得触摸。如果不存在,则什么也没有发生。

我在应用程序文档中没有找到此记录功能。

我还发现this https://stackoverflow.com/questions/7806557/touch-events-within-8-pixels-of-nav-bar-not-called主题与我的问题相关,但也没有答案。


我注意到,如果您将 userInteractionEnabled 设置为 OFF,导航栏将不再“窃取”触摸。

因此,您必须对 UINavigationBar 进行子类化,并在 CustomNavigationBar 中执行以下操作:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

    if ([self pointInside:point withEvent:event]) {
        self.userInteractionEnabled = YES;
    } else {
        self.userInteractionEnabled = NO;
    }

    return [super hitTest:point withEvent:event];
}

您可以找到有关如何子类化 UINavigationBar 的信息here https://stackoverflow.com/questions/6672229/how-to-subclass-uinavigationbar-for-a-uinavigationcontroller-programatically.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 UINavigationBar 会窃取触摸事件? 的相关文章

随机推荐

  • 将 CA 签名的 JKS 密钥库转换为 PEM

    我有一个带有 CA 签名证书的 JKS 密钥库 我需要将其导出为 PEM 格式才能与 nginx 一起使用 我需要以包含整个链的方式进行操作 以便我的客户可以验证签名 如果我做类似的事情 keytool exportcert keystor
  • pip 安装后没有名为 imutils.perspective 的模块

    我正在尝试遵循本教程 该教程需要imtools 看起来我已经安装了这个包 但Python编译器找不到它 这里发生了什么 教程 http www pyimagesearch com 2016 10 03 bubble sheet multip
  • 带 xcframework 的 Flutter 插件仅适用于不在 ios 模拟器中的设备

    我创建了一个颤振插件 通过在 Flutter 中运行示例应用程序 我收到此错误 Error Swift Compiler Error Xcode No such module AusweisApp2 这是我的文件夹结构 podspec 文件
  • 如何处理移动设备发送的图像?

    我的一位同事正在开发一款 iPhone 应用程序 该应用程序将允许用户通过我的 API 在我的网站上发布图像 我正在构建 API 的一部分 用于接受和处理图像 移动开发人员发送的标头如下 Content Disposition form d
  • Simplecursoradaptor 内的自定义文本字体

    我制作了一个使用 SimpleCursoradapter 的应用程序 String from new String title notes image int to new int R id esodaTextView R id amoun
  • Psycopg2 单引号异常

    我在我的应用程序中使用 psycopg2 一切都很好 但是 当我插入数据时包含单引号 然后 python 抛出下面的异常
  • WebDriverException:消息:握手中缺少“marionette Protocol”字段

    我目前正在尝试在本地运行 robotsframework 测试脚本 Ubuntu 12 04 LTS 64 位 我遇到的问题是无法在 Open Browser 中启动 FF 浏览器 以下是我所拥有的设置的详细信息 规格 火狐浏览器 v26
  • 使用 Cookie 的购物车

    我正在尝试使用 cookie 会话制作一个简单的购物车 根据此代码片段 它仅包含 4 个项目
  • Django - 如何将多个参数传递给 url 模板标签

    在我的 urls py 中我有 r P
  • Rstudio 中的 R 找不到 rmarkdown 包

    我第一次尝试在 PC 上的 Rstudio 0 98 953 中使用 rmarkdown 我已升级到最新版本的 R 3 1 1 和 R studio 本问题末尾提供了 sessionInfo 的输出 据我了解 rmarkdown 应该包含在
  • 使用变量访问对象的属性

    如果我有一个对象 具有名称 电话号码等属性 我如何使用变量在 Javascript 中访问这些属性 我想通过执行以下操作来访问 javascript 中的属性名称 object name bob phone number 911 prope
  • powershell 运行 pip

    我想通过 powershell 脚本运行 python 模块升级 第一行有效 但我不知道如何正确读入文件 第二条点线 我收到此错误 Could not find a version that satisfies the requiremen
  • NFCTagReaderSession“缺少所需的权利”

    我正在深入研究 iOS 13 的新 CoreNFC 功能 并且正在努力让 NFCTagReaderSession 正常工作 设置我的权利并实例化 NFCTagReaderSession 和委托后 我尝试通过调用来启动会话nfcTagRead
  • Swift:如何从 UIImage 数组中提取图像文件名

    如果我有一个像这样的 UIImage 数组 newImageArray UIImage named Red png UIImage named Green png UIImage named Blue png UIImage named Y
  • 如何使用 DotNetZip 从 zip 中提取 XML 文件

    我使用的是最新版本的 DotNetZip 并且有一个包含 5 个 XML 的 zip 文件 我想打开 zip 读取 XML 文件并使用 XML 的值设置一个字符串 我怎样才能做到这一点 Code thats my old way of do
  • 使用 Selenium 的模态对话框窗口

    因此 我尝试使用 Selenium 导航到 IE9 中的页面 该页面在加载页面时显示存在证书错误 使用 AutoIT 我可以让它在浏览器中单击 然后按 TAB 两次 然后按 Enter 键 没有问题 然而 当它继续时 它会抛出 模态对话框存
  • 如何避免未使用的 setState 函数? React useState 可以在没有 setter 的情况下创建吗?

    我目前正在减少 删除 React 站点上的 npm 警告 大量警告是由 setState 函数 未使用 引起的 如下所示 const state setState useState some state 以下哪项是消除这些警告的更好方法 或
  • 基本高性能数据真实性

    我不是母语人士 术语可能不正确 对此感到抱歉 我正在 AVR 微控制器之间通过无线电传输数据供个人使用 并希望客户能够证明传输数据的真实性 因为它来自授权客户之一 这意味着我不需要不可否认性并且能够预先定义共享密钥 我对不同的方法进行了一些
  • Xcode 8:以 NSException 类型的未捕获异常终止

    我是新手 我遇到了这个错误 我到处查找 但找不到解决方案 任何帮助将非常感激 0 CoreFoundation 0x00000001102bb34b exceptionPreprocess 171 1 libobjc A dylib 0x0
  • 为什么 UINavigationBar 会窃取触摸事件?

    我有一个自定义 UIButton 其中 UILabel 添加为子视图 仅当我触摸顶部边界下方约 15 个点时 按钮才会执行给定的选择器 当我点击该区域上方时 什么也没有发生 我发现这并不是由错误创建按钮和标签引起的 因为在我将按钮向下移动约