didSelectRowAtIndexPath 与 Tap Gesture Recognizer 冲突

didSelectRowAtIndexPath is in conflict with Tap Gesture Recognizer

我通过 Storyboard 在 ViewController 中设置了点击手势识别器 (因此视图中的所有点击,如果显示此键盘,将隐藏键盘)

问题是现在,我在这个视图中添加了一个 TableView,当我点击一个单元格时,使用 Tap Gesture Recognizer 设置的方法是调用,而不是 didSelectRowAtIndexPath

"funny" 的事情是,如果我在单元格上停留 2 秒或更长时间,将调用委托 didSelectRowAtIndexPath,而不是 TapGestureRecognizer 方法。

你们能解释一下这里发生了什么吗?我哪里错了,为什么错了?

你的UITapGestureRecognizer可能cancels the touch event成功识别触摸。

尝试设置

tapGestureRecognizer.cancelsTouchesInView = NO;

要更深入地阅读此主题,have a look an the conceptual docs on gesture recognition

更好的方法是不要使用 didSelectRowAtIndexpath 方法。

如果您必须在 table 视图单元格上实现手势,则在 cellForRowAtIndexpath 中创建点击手势并使用标签识别特定的单元格点击。