将UIGestureRecognizer添加到UITableViewCell

时间:2013-02-24 16:33:35

标签: ios uigesturerecognizer runtime-error uiswipegesturerecognizer

我使用http://www.raywenderlich.com/21842/how-to-make-a-gesture-driven-to-do-list-app-part-13向我的单元格添加手势识别器,以便我可以从左向右移动它们,但我收到此错误:

[UISwipeGestureRecognizer translationInView:]: unrecognized selector

我甚至不使用滑动识别器,所以我现在不知道该怎么做。

UIGestureRecognizer* recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
recognizer.delegate = self;
[self addGestureRecognizer:recognizer];

谢谢!

1 个答案:

答案 0 :(得分:0)

您的gestureRecognizerShouldBegin似乎正在调用您创建的UIPanGestureRecognizer以外的其他动作。显然,您可以通过更改单元子类中的gestureRecognizerShouldBegin来测试症状,以测试它是否为平移手势:

-(BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
    {
        CGPoint translation = [gestureRecognizer translationInView:gestureRecognizer.view];

        if (fabsf(translation.x) > fabsf(translation.y)) {
            return YES;
        }
        return NO;
    }

    return NO;
}

上述修复只是解决了症状。真正的问题是,UIGestureRecognizerDelegate方法gestureRecognizerShouldBegin是如何调用除UIPanGestureRecognizer以外的手势。可以使用其他手势(例如,如果您实现了返回canEditRowAtIndexPath的{​​{1}},则会启用滑动手势),但我看不到您的自定义单元格如何被识别为该滑动手势的代表。

我可以重现您的问题的唯一方法是手动向单元格(或表格或视图)添加滑动手势。我知道你说你没有使用滑动手势,但可能是偶然在Interface Builder中添加了一个或类似的东西?我不知道,因为我在复制你描述的症状时遇到了麻烦。如果最坏的情况发生,您可以压缩您的项目并与我们分享,我很乐意快速浏览。