我正在尝试在UITableView中检测触摸并保持手势,同时跟踪选择了哪个单元格。我需要能够区分单元格上的正常点击和持续时间超过X秒(可能是1秒左右)的触摸。主要的挑战是我想在没有子类化UITableViewCell的情况下这样做,因为这样做会大大减慢我的滚动速度。我认为使用NSTimer可能有一种方法可以做到这一点,但我似乎无法让它正常工作。使用touchesBegan:和touchesEnded:有一个计时器,因为我没有看到任何方法来跟踪选择哪个单元格,除非有一些方法可以用这些方法做到这一点?任何帮助将不胜感激。
提前致谢。
答案 0 :(得分:18)
如果我们讨论的是单元格,您可能需要获取已按下的单元格的indexPath。
在分配新实例后立即将手势识别器添加到单元格中:
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
[cell addGestureRecognizer:longPress];
[longPress release];
处理长按事件,并获取indexPath:
-(void) handleLongPress: (UIGestureRecognizer *)longPress {
if (longPress.state==UIGestureRecognizerStateBegan) {
CGPoint pressPoint = [longPress locationInView:table];
NSIndexPath *indexPath = [table indexPathForRowAtPoint:pressPoint];
}
}
答案 1 :(得分:6)
UILongPressGestureRecognizer就是为了这件事而制作的。您创建一个并将其添加到UITableViewCell以处理长按。
答案 2 :(得分:3)
简短回答:子类并使用UILongPressGestureRecognizer
。
更长的答案:我相信您在UITableViewCell
子类中遇到滚动问题的原因是reuseIdentifier
不匹配,因此不会重复使用单元格。确保您在reuseIdentifier
方法中使用的cellForRowAtIndexPath:
与您在Interface Builder中为自定义reuseIdentifier
笔尖设置的UITableViewCell
相匹配。当我创建我的第一个子类并且只是匹配reuseIdentifier
时,我遇到了同样的问题。 :)
就使用UILongPressGestureRecognizer
而言,请查看UIGestureRecognizer
的文档,您应该能够很快找到它。