UITableView需要长按select一行

任何人都曾经遇到这个问题, UITableView需要长按触发didSelectRowAtIndexPath方法?

如果您已经使用任何手势识别器尝试删除它,并检查是否导致问题?

除此以外

不知道,但问题可能是在UITableViewdelaysContentTouches打开。 将其closures,以便更快地触及细胞。

我有同样的麻烦:

  • 我使用Tap Gesture识别器来pipe理View Controller中的不同动作
  • 我想要一个经典的点击(短点击)触发didSelectRowAtIndexPath方法,但只是默认的长按工作

我的解决scheme,通过短按(select)在表视图中select一个单元格(按):

  • 在故事板中select您的Tap Gesture识别器
  • 转到属性检查器,并取消select“取消在视图中”

在我的情况下,我有一个UITapGestureRecognizer在我的视图隐藏我的键盘。

这解决了这个问题:

 tap.cancelsTouchesInView = false 

您必须将UILongPressGesture添加到您的单元格视图中,然后从您的类采用UITableViewDelegate调用didSelectRowAtIndexPath(最好是调用另一个方法 – 不是标准的UITableViewDelegate方法)。

我会build议你创build自己的协议,从UITableViewDelegateinheritance,为长按行为方法添加方法并享受。 类似于:

 @protocol LongPressTableViewCellDelegate <UITableViewDelegate> - (void)tableView:(UITableView *)tableView didLongTapCell:(UITableViewCell *)cell; @end 

在这种情况下你的委托将采用不标准的UITableViewDelegate,但这一个。 你也必须创build自己的单元格(从UITableViewCellinheritance),并添加那里将委托属性(id),将长时间按下时使用。

还有可能会有标准didSelectRowAtIndexPath将被激发之前,你的长按会触发,所以我build议你禁用表视图的标准select行为:

 _tableView.allowsSelection = NO;