UITableView需要长按才能选择一行

时间:2013-11-14 06:09:06

标签: ios iphone objective-c tableview long-press

任何人都遇到UITableView需要长按以触发didSelectRowAtIndexPath方法的问题?

4 个答案:

答案 0 :(得分:21)

如果您使用过任何手势识别器,请尝试将其删除并检查是否会导致问题?

其他明智的

不确定但问题可能出在UITableView delaysContentTouches已启用开启。将此关闭,以便更快地接触到细胞。

答案 1 :(得分:4)

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

这解决了这个问题:

tap.cancelsTouchesInView = false

答案 2 :(得分:2)

我遇到了同样的麻烦:

  • 我使用Tap Gesture识别器来管理我的View Controller中的不同操作
  • 我想要一个经典的点按(短按)来触发didSelectRowAtIndexPath方法,但默认情况下长按

我的解决方案是通过短按选择表视图中的单元格(按):

  • 在故事板中选择您的Tap Gesture识别器
  • 转到属性检查器并取消选择"在视图中取消"

答案 3 :(得分:0)

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

我建议你创建自己的协议,继承自UITableViewDelegate,为那里添加长按行为方法并享受。类似于:

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

在这种情况下你的代表将采用非标准的UITableViewDelegate,但是这个。此外,您必须创建自己的单元格(从UITableViewCell继承)并添加委托属性(id),将在长按触发时使用。

另外可能会出现标准didSelectRowAtIndexPath在您的长按将触发之前被触发的情况,因此我建议您禁用表格视图的标准选择行为:

_tableView.allowsSelection = NO;