UITableView需要长按才能选择一行。

8

有没有遇到过这样的问题:需要长按UITableView才能触发didSelectRowAtIndexPath方法?


1
@iPatel 谢谢您的即时回答,很有效~ - keywind
1
@keywind:如果iPatel的回答解决了你的问题,请接受他的答案。 - manujmv
4个回答

24

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

否则

不确定,但问题可能在UITableView中开启了delaysContentTouches。将其关闭,以便快速传递触摸到单元格。


4
在我的情况下,我在视图上使用了一个UITapGestureRecognizer来隐藏键盘。 以下解决了这个问题:
tap.cancelsTouchesInView = false

2

我有完全相同的问题:

  • 我使用Tap Gesture recognizer来管理视图控制器中的不同操作
  • 我想用传统的轻击(短按)来触发didSelectRowAtIndexPath方法,但默认情况下只有长按有效

我解决Table View通过短按选择单元格的方法:

  • 在Story Board中选择您的Tap Gesture recognizer
  • 进入属性检查器并取消“在视图中取消”

这也是我的问题。该标志称为“cancelsTouchesInView”,这有点说得通。 - n13

0

你需要在单元格的视图上添加UILongPressGesture,当触发时调用didSelectRowAtIndexPath方法(最好调用另一个方法 - 不是标准的UITableViewDelegate方法),该方法来自于采用UITableViewDelegate协议的类。

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

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

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

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

_tableView.allowsSelection = NO;

他不想要长按,他试图摆脱它。 - Simon Moshenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接