有人遇到过UITableView
需要长按触发didSelectRowAtIndexPath
方法的问题吗?
4 回答
如果您使用过任何手势识别器,请尝试将其移除并检查它是否导致问题?
否则
不确定,但问题可能出在UITableView
已delaysContentTouches
打开。将此关闭,以便触摸更快地进入单元格。
在我的情况下,我的视图上有一个 UITapGestureRecognizer 用于隐藏我的键盘。
这解决了问题:
tap.cancelsTouchesInView = false
我遇到了完全相同的麻烦:
- 我使用 Tap Gesture 识别器来管理视图控制器中的不同操作
- 我想要一个经典的点击(短按)来触发 didSelectRowAtIndexPath 方法,但默认情况下只是长按
我通过短按(按)在表格视图中选择一个单元格的解决方案:
- 在故事板中选择您的点击手势识别器
- 转到属性检查器并取消选择“在视图中取消”
您必须将 UILongPressGesture 添加到您的单元格的视图中,并且只需从采用 UITableViewDelegate 的类中调用 didSelectRowAtIndexPath (更好的是调用另一个方法 - 不是标准的 UITableViewDelegate 的方法)。
我会建议你创建自己的协议,继承自 UITableViewDelegate,为长按行为方法添加方法并享受。类似于:
@protocol LongPressTableViewCellDelegate <UITableViewDelegate>
- (void)tableView:(UITableView *)tableView didLongTapCell:(UITableViewCell *)cell;
@end
在这种情况下,您的委托将采用不是标准的 UITableViewDelegate,而是这个。此外,您必须创建自己的单元格(从 UITableViewCell 继承)并在那里添加委托属性(id),该属性将在长按触发时使用。
也可能存在标准 didSelectRowAtIndexPath 将在您的长按触发之前触发的情况,因此我建议您禁用表格视图的标准选择行为:
_tableView.allowsSelection = NO;