didSelectRowAtIndexPath与Tap Gesture Recognizer相冲突

时间:2016-01-22 10:40:19

标签: ios objective-c uitableview tableview uitapgesturerecognizer

我通过Storyboard在我的ViewController中设置了Tap Gesture Recognizer (因此视图中的所有点击,如果显示此键盘,将隐藏键盘)

现在,我已经在这个视图中添加了一个TableView,当我在一个单元格上进行clic时,使用Tap Gesture Recognizer设置的方法是调用,而不是didSelectRowAtIndexPath

“有趣”的是,如果我在单元格上停留2秒或更长时间,则会调用委托didSelectRowAtIndexPath,而不是TapGestureRecognizer方法。

你能解释一下这里发生了什么吗?我在哪里以及为什么错?

2 个答案:

答案 0 :(得分:7)

成功识别触摸后,UITapGestureRecognizer可能cancels the touch event

尝试设置

tapGestureRecognizer.cancelsTouchesInView = NO;

有关此主题的更全面的阅读,have a look an the conceptual docs on gesture recognition

答案 1 :(得分:-2)

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

如果您必须在表格视图单元格上实现手势,则在cellForRowAtIndexpath中创建轻击手势,并使用标记标识特定单元格单击。