检测触摸并按住UITableView内部

时间:2010-11-10 16:50:34

标签: iphone uitableview

我正在尝试在UITableView中检测触摸并保持手势,同时跟踪选择了哪个单元格。我需要能够区分单元格上的正常点击和持续时间超过X秒(可能是1秒左右)的触摸。主要的挑战是我想在没有子类化UITableViewCell的情况下这样做,因为这样做会大大减慢我的滚动速度。我认为使用NSTimer可能有一种方法可以做到这一点,但我似乎无法让它正常工作。使用touchesBegan:和touchesEnded:有一个计时器,因为我没有看到任何方法来跟踪选择哪个单元格,除非有一些方法可以用这些方法做到这一点?任何帮助将不胜感激。

提前致谢。

3 个答案:

答案 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的文档,您应该能够很快找到它。

UILongPressGestureRecognizer Documentation

UIGestureRecognizer Documentation