与UITableView的超级视图上的UIPanGestureRecognizer冲突

时间:2018-08-25 16:23:22

标签: ios swift xcode uitableview uipangesturerecognizer

我正在尝试构建与iOS上Apple Maps中的抽屉菜单大致相似的内容。

在此Xcode project中,我在VC的视图上附加了UIPanGestureRecognizer,并且在平移时,垂直移动了UITableView并禁用了滚动。

问题是,每次平移结束后,didSelectRow方法仅在UITableView上某处发生第二次点击后才被调用。当然,我希望在第一次点击后调用它。

有趣的是,如果启用表的滚动功能,则不会发生该错误,并且手势识别器的委托中有shouldRecognizeSimultaneouslyWith返回了true

如果您尝试用手指放在抽屉内列表中最近的位置条目上来拉起抽屉,则其他有趣的事情似乎也发生在Apple Maps本身中。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我不太明白你在说什么。 但是我认为主要问题是“链响应程序”。当您在响应者链中使用PanGestureRecognizerUITableView属性isScrollEnable = false时,PanGestureRecognizer是第一个被调用的人,系统等待失败或事件为未处理,则将其传递到响应者链中的下一个,即UITableView。因此,调用didSelectRow函数花费的时间太长 我建议您创建一个新的UIView并插入情节提要中的ViewController并将UITableVIew放在该UIView的外面,然后链接{{1} }到新的PanGestureRecognizer。这样,响应方链就不会与两者冲突,因为系统可以检测到拖动何时位于新的UIView中,并且仅调用UIView以及何时位于{{ 1}}将调用PanGestureRecognizer

最佳问候 如果无法解决则写