我有一个菜单的视图,使用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,它可以工作.我将避免触摸开始,…像瘟疫一样,并为任何复杂的事情编写自定义手势识别器.
我希望这有助于有人像我一样拔头发!