停止 UITableView 消耗触摸事件,以便父视图中的滑动菜单可以检测水平滑动

2024-03-23

试图实现如此简单的事情,我几乎要绝望了。

我有一个带有菜单的视图,当通过水平滑动手势进行操作时,使用 touchEvents 从左侧滑动。我不使用手势识别器,我只是使用touchesBegan、touchesMoved等,并跟踪起始触摸位置、中间触摸位置和结束触摸位置之间的x坐标差。效果很好。

但是,当我在主体中有一个 UITableView 时,触摸事件不再沿着层次结构到达管理菜单的视图。我试图通过将触摸传递给 superview/nextResponder 来解决这个问题,这确实有效,但我看到在它停止在层次结构中进一步处理之前有一个 TouchBegan 和 2 个 TouchMoved 调用。

具体来说,我有一个 SlideMenuView,其中有一个菜单视图和一个正文视图。在主体视图中,我有时有 UITableView。我看到(通过 NSLog)touches* 方法从开始到结束都被调用得很好。我将它们传递给 nextResponder 并开始在 SlideMenuView 中看到它们 - 但在两次调用 TouchMoved 后,它们似乎在 SlideMenuView 中停止,但在我的 UITableView 中继续。

我正在重写 UITableView 来执行此操作,但我在其中没有进行任何更改。

我知道这一定是可能的,就像在 Facebook 应用程序中一样。您可以水平滑动身体的任何位置(可滚动)并显示菜单。我希望同样的事情在这里自然发生,但似乎发生了一些奇怪的事情,并且 UITableView 正在消耗或销毁事件。

有人能帮我解决这个问题吗?一定有人以干净的方式实现了这一目标。


好吧,对于任何感兴趣的人 - 我找到了一个干净的解决方案。

苹果知道他们在做什么。回到我们曾经覆盖的那一天touchesBegan,...但随后他们介绍了GestureRecognizers。对于某些控件,例如UIScrollView(以及任何子类,例如UITableView),他们似乎破坏了他们的事件响应系统。我错误地假设Gesture Recognizers不要做任何特别的事情,只需连接到这些touchesBegan,...方法 - 这是不正确的。

最安全的方法是使用Gesture Recognizers。具体来说,它们有一些选项可以发挥重要作用。例如.cancelsTouchesInView = YES就我而言。

所以我所做的是使用PanGestureRecognizer在菜单视图上,设置.cancelsTouchesInView to YES,并且它有效。我要避免touchesBegan,...就像瘟疫一样,为任何复杂的事情编写自定义手势识别器。

我希望这可以帮助像我一样拔头发的人!

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

停止 UITableView 消耗触摸事件,以便父视图中的滑动菜单可以检测水平滑动 的相关文章

  • 在 UITableView 的部分标题文本下方添加一些边距

    我已经设计了标题文本的样式 func tableView tableView UITableView cellForRowAtIndexPath indexPath NSIndexPath gt UITableViewCell let ce
  • UILabel UILongPressGestureRecognizer 不起作用?

    我怎样才能得到UILongPressGestureRecognizer在 uilabel 当我实现以下代码时 它不会调用该函数 那么请告诉我我做错了什么 UILongPressGestureRecognizer longPress UILo
  • 子类 PFObject 上的 PFUser 属性

    我使用以下类 动态属性以及 m 文件中的 load 和 parseClassName 方法 对 PFObject 进行了子类化 interface DAOpponents PFObject
  • 领域:结果 和列表

    是否可以转换Results
  • NSUserDefaults 多久同步一次?

    的文档NSUserDefaults说synchronise方法被定期调用 但没有提及频率 10分钟的谷歌搜索没有发现任何信息 发生的频率是多少synchronise方法调用 这是一个未公开的实现细节 可能甚至不是一个恒定的时间间隔 但是 您
  • 如何在 Firebase Analytics 事件中报告参数

    我用过Fabric with iOS在此之前 在同一分析事件中报告自定义参数非常容易 如下所示 Answers logCustomEvent withName saved border customAttributes image inde
  • HTML 分页

    有没有html分页的开源项目 我正在为 iPhone 开发一个应用程序 我想在 UIWebView 上显示 HTML 文件 并且不希望用户向下滚动以查看屏幕上未显示的剩余内容 我想在第二个 UIWebView 上显示剩余的内容 我怎样才能做
  • 如何向 UIView 添加大小调整手柄?

    我试图根据用户请求在运行时动态创建视图 UIImageView 和 UITextView 然后允许用户移动它们并调整它们的大小 除了调整大小之外 我的一切都工作得很好 我尝试使用捏合手势识别器 但发现它对于我想要的东西来说太笨拙了 因此 我
  • 使用 AVFoundation 裁剪 AVAsset 视频

    我在用AVCaptureMovieFileOutput录制一些视频 我使用显示预览层AVLayerVideoGravityResizeAspectFill稍微放大 我遇到的问题是最终的视频较大 包含预览期间不适合屏幕的额外图像 这是预览和生
  • 如何在iOS的Delphi程序中使用IPv6协议

    我尝试在我的移动程序中使用 IPv6 协议 我的服务器位于 NAT 后面的 LAN 内 在服务器上我使用IP端口3000 我已经组织了从路由器端口 45500 到服务器端口 3000 的虚拟服务器 端口转发 在服务器上 我运行 ipconf
  • 以弯曲格式显示文本

    我正在寻找以曲线格式绘制一些文本 我使用哪个控件并不重要 UITextField UILabel or UITextView 我只想显示如图所示的文本 仍在寻找解决方案 请帮忙 查看此链接 https nodeload github com
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • 沙盒尝试恢复消耗性 IAP

    我一直在尝试在 iOS 上测试一些消耗性 IAP 但遇到了一个奇怪的错误 弹出一条警报 其中包含以下文本 此应用内购买已被购买 它将恢复为 自由的 环境 沙盒 我已经检查过 并且确定我的 IAP 可以在 iTunesConnect 中使用
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • XCode 4.5 给我“SenTestingKit/SenTestKit.h”文件未找到,但适用于 4.4.1

    我刚刚安装了 XCode 4 5 它在我现有的项目之一上给了我一个 SenTestingKit SenTestingKit h 文件未找到错误 此错误仅发生在 XCode 4 5 中 但它在 4 4 1 上编译正常 我已经检查过SenTes
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部
  • ios - 在哪里放置 s.static_framework = true

    我在 CocoaPods 中的级别为 0 当我使用pod install有一个错误说 The Pods App target has transitive dependencies that include static framework
  • iOS 视图控制器内存在被关闭后未释放

    当用户单击按钮时 它会显示一个带有两个视图控制器的新选项卡栏视图控制器 我是这样做的 ACLevelDownloadController dvc ACLevelDownloadController alloc initWithNibName
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图

随机推荐