【问题标题】:didSelectRowAtIndexPath is in conflict with Tap Gesture RecognizerdidSelectRowAtIndexPath 与点击手势识别器冲突
【发布时间】:2016-04-28 22:23:45
【问题描述】:

我已经通过情节提要在我的 ViewController 中设置了一个点击手势识别器 (因此视图中的所有点击,如果显示此键盘,将隐藏键盘)

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

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

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

【问题讨论】:

  • 当键盘打开然后添加点击手势,当键盘隐藏然后从视图中移除点击手势,这是一种方法
  • @Jaimish :我已经做到了,它非常适合 TapGestureRecognizer 方法,但是现在,在我的 TableView 上,当我单击一个单元格时不会调用任何内容,并且当我停留时会调用 didSelectRowAtIndexPath按住单元格 2 秒或更长时间,我仍然想知道为什么。
  • 你试过@Jan Greve 的答案吗?
  • 提供一些Textfield或Textview委托的代码以及tableview的选择方法

标签: ios objective-c uitableview tableview uitapgesturerecognizer


【解决方案1】:

您的UITapGestureRecognizer 可能是cancels the touch event 成功识别触摸时。

尝试设置

tapGestureRecognizer.cancelsTouchesInView = NO;

如需更全面地了解此主题,请have a look an the conceptual docs on gesture recognition

【讨论】:

  • 在将我的代码更新到 Jaimish 之后,我确定我的视图上没有设置手势,但是只有当我按住单元格超过 2 秒时,才会调用 didSelectRowAtIndexPath,没有当我单击它时调用它(但是,当单击它时,单元格仍然“闪烁”,代码是否有可能调用另一个委托,其他 tahn didSelectRowAtIndexPath ?)
  • 你的手势识别器的动作被调用了吗?你怎么“确定”?您是否在您的代表上实施了tableView(_ tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath??这也可能禁止它。
  • 是的,我发现在storyboard中,一些gestureRecognizer被设置为不存在的方法,删除它们后,它工作得很好!!顺便谢谢:)
  • 我认为这使我的答案正确且有用。随意接受它。
  • @SmokeDispenser 它仍然对我不起作用,我不是从表格视图中选择项目的表格,我已经实现了 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 方法
【解决方案2】:

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

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

【讨论】:

  • @EdwardAnthony 你能解释一下这里出了什么问题,这样我就可以学习了。
猜你喜欢
  • 1970-01-01
  • 2012-12-29
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多