8

有人遇到过UITableView需要长按触发didSelectRowAtIndexPath方法的问题吗?

4

4 回答 4

24

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

否则

不确定,但问题可能出UITableViewdelaysContentTouches打开。将此关闭,以便触摸更快地进入单元格。

于 2013-11-14T06:21:29.133 回答
4

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

这解决了问题:

tap.cancelsTouchesInView = false
于 2016-06-11T16:06:57.393 回答
2

我遇到了完全相同的麻烦:

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

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

  • 在故事板中选择您的点击手势识别器
  • 转到属性检查器并取消选择“在视图中取消”
于 2014-03-20T13:18:07.977 回答
0

您必须将 UILongPressGesture 添加到您的单元格的视图中,并且只需从采用 UITableViewDelegate 的类中调用 didSelectRowAtIndexPath (更好的是调用另一个方法 - 不是标准的 UITableViewDelegate 的方法)。

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

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

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

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

_tableView.allowsSelection = NO;
于 2013-11-14T06:19:45.843 回答