如何为UITableView单元格添加滑动手势?

13

我在 cellForRowAtIndexPath 中添加了这段代码

UISwipeGestureRecognizer *gestureR = [[UISwipeGestureRecognizer alloc]
                                             initWithTarget:self action:@selector(handleSwipeFrom:)];
        [gestureR setDirection:UISwipeGestureRecognizerDirectionRight];//|UISwipeGestureRecognizerDirectionRight)];
        [cell addGestureRecognizer:gestureR];

它运行良好。但是我想使用 UISwipeGestureRecognizerDirectionLeft,所以像这样添加:

[gestureR setDirection:UISwipeGestureRecognizerDirectionLeft|UISwipeGestureRecognizerDirectionRight)];

当我通过方向和状态进行检查时,我总是得到3 = 3的结果。

- (void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {    

    NSLog(@"%d = %d",recognizer.direction,recognizer.state);
}

如果我只应用一个手势,它可以正常工作。我尝试逐个添加两个手势。但是它只响应其中一个手势。

如何添加第二个手势。我直接将一个手势添加到TableView,另一个手势添加到单元格,但现在没有使用。

3个回答

23

建议尝试以下代码:

UISwipeGestureRecognizer* gestureR;
gestureR = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom)] autorelease];
gestureR.direction = UISwipeGestureRecognizerDirectionLeft;
[view addGestureRecognizer:gestureR];
gestureR = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom)] autorelease]; gestureR.direction = UISwipeGestureRecognizerDirectionRight; // 默认 [view addGestureRecognizer:gestureR];

如果您想在左右滑动时处理不同的功能,请更改选择器。


7

如果您使用单次分配,而不是两次分配,将更为优越。

UISwipeGestureRecognizer* recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
[recognizer setDirection:UISwipeGestureRecognizerDirectionLeft+UISwipeGestureRecognizerDirectionRight];
[cell addGestureRecognizer:recognizer];

并在操作中获取滑动方向,如下所示:

-(void)handleSwipe:(UISwipeGestureRecognizer *) sender 
{
    if (sender.direction == UISwipeGestureRecognizerDirectionLeft) 
    {
    //do something
    }
    else //if (sender.direction == UISwipeGestureRecognizerDirectionRight) 
    {
  //do something
     }
}

5

我知道你提出这个问题已经很久了。

但请再次阅读您的问题中的以下行:

[gestureR setDirection:UISwipeGestureRecognizerDirectionRight|UISwipeGestureRecognizerDirectionRight)];

你有没有意识到你重复添加了 UISwipeGestureRecognizerDirectionRight 两次!!!

:D


谢谢。就记录而言,[gestureR setDirection:UISwipeGestureRecognizerDirectionLeft|UISwipeGestureRecognizerDirectionRight)];非常好用。在Xcode 4.6.2上进行了尝试和测试。 - holierthanthou84

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