iOS UITableViewCell需要按两次来调用didSelectRowAtIndexPath

我有一个UITableView有时需要你触摸两次来select一个单元格。

更具体的:

  • 只有在表格一直向上滚动或者一直向下滚动之后,才需要两次触摸。
  • 只有第二次触摸甚至调用didSelectRowAtIndexPath
  • 当桌子以自然的“向上滚动位置”打开时,单元格确实可以通过一次触摸来select。
  • 如果只是滚动一点点(不是全部向下/向上),单元格将只需一次触摸即可进行select。
  • 如果单元格不填充整个表格,并且不需要滚动,则可以正常工作。
  • 一直到顶部或底部,你必须触摸两次。

我有一种感觉,第一个触摸是真正使UITableViewCells可选或以某种方式激活表。

我已经检查过的东西:

  • 我的代码绝对不会在任何地方调用didDeselectRowAtIndexPath
  • 没有UIGestureRecognizers正在使用setCancelsTouchesInView:

桌子上的其他设置:

 self.tableView.scrollEnabled = YES; self.tableView.showsVerticalScrollIndicator = NO; self.tableView.bounces = NO; self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; 

这是什么原因造成的?


更新

奇怪的是,设置self.tableView.bounces = YES; 解决了这个问题。

如果有人有更好的答案,我仍在调查根本原因。 很显然,我希望桌子不要反弹,但是如果花费关键function,则不会。

可能是你执行didDeselect而不是didSelect?

迅速:

一旦一个细胞被挖掘,它也被选中,尝试取消它一被挖掘。

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { tableView.deselectRowAtIndexPath(indexPath, animated: false) } 

其他要检查的内容还有delaysContentTouchescanCancelContentTouches属性。