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

前端之家收集整理的这篇文章主要介绍了ios – 停止UITableView消耗触摸事件,因此父视图中的滑动菜单可以检测水平滑动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为了实现这么简单的事情,我感到绝望.

我有一个菜单的视图,使用touchEvents从左侧滑动时,通过水平滑动进行手势操作.我不使用手势识别器,我只是使用touchesBegan,touchesMoved等.并跟踪起始触摸位置,中间和最终触摸位置之间的x坐标差异.它很棒.

但是,当我在身体中有一个UITableView时,触摸事件不再在层次结构中找到管理菜单的视图.我试图通过将触摸传递给superview / nextResponder来解决这个问题,但是我看到一个touchesBegan和2个touchesMoved调用,然后才停止在层次结构中进一步处理.

具体来说,我有一个SlideMenuView,其中有一个菜单视图和一个正文视图.在身体视图中,我在某些时候有UITableView.我看到(通过NSLog)触摸*方法从头到尾调用就好了.我将它们传递给nextResponder并开始在SlideMenuView中看到它们 – 但是在2次调用touchesMoved后,它们似乎停在SlideMenuView中,但继续在我的UITableView中.

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

我知道这一定是可能的,因为它在Facebook应用程序中.您可以在身体的任何位置滑动,水平可滚动并显示菜单.我想在这里自然发生同样的事情,但看起来好像发生了一些奇怪的事情,而UITableView正在消耗或破坏事件.

有人可以帮我解决这个问题吗?有人必须以干净的方式实现这一目标.

解决方法

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

Apple知道他们在做什么.回到那天我们曾经覆盖touchesBegan,……但随后他们推出了GestureRecognizers.对于某些控件,例如UIScrollView(以及任何子类,例如UITableView),它们似乎会对它们的事件响应器系统进行屠宰.我有理由认为手势识别器没有做任何特殊的事情,只是简单地勾住这些touchesBegan,……方法 – 这是不正确的.

最安全的方法是使用手势识别器.具体来说,它们有一些选项可以产生重大影响.例如.cancelsTouchesInView = YES在我的情况下.

所以我做的是在菜单视图上使用PanGestureRecognizer,将.cancelsTouchesInView设置为YES,它可以工作.我将避免触摸开始,…像瘟疫一样,并为任何复杂的事情编写自定义手势识别器.

我希望这有助于有人像我一样拔头发!

原文链接:https://www.f2er.com/iOS/328651.html

猜你在找的iOS相关文章