在iOS 7中操纵手势识别器

时间:2014-01-14 09:03:33

标签: iphone objective-c ios7 uigesturerecognizer gesture-recognition

我有一个手势识别器,我是用计算器制作的。它连接到用户双击时激活的动作。我将手势识别器连接到视图控制器的主视图,但手势识别器也应用于我的按钮。因此,如果用户快速键入11,他们将快速按两次1并意外激活他们不想要的功能。如何使UIGestureRecognizer不对按钮起作用?我想保持双击手势。我不想把它变成两指点击或类似的东西。但是,如果没有其他办法(我怀疑有),我可以做到。

3 个答案:

答案 0 :(得分:0)

试试这个:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

    if ((touch.view == yourButton)) {
        return NO;
    }

    return YES;
}

每次识别手势时都会调用此手势,如果视图是您的按钮,则会忽略手势。

答案 1 :(得分:0)

您应该在ViewController.h中采用UIGestureRegconizerDelegate协议

@interface ViewController : UIViewController <UIGestureRecognizerDelegate>

@end
在ViewController.m中

,实现此方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([touch.view isKindOfClass:[UIControl class]]){
        return NO;
    }
    return YES;
}

yourGestureRecognizer.delegate = self //your view controller.

答案 2 :(得分:0)

根据安东尼奥的答案,你可以给你所有的tag更容易。据推测,您的计算器只有一个yourButton。假设您的所有按钮都有大于100的标签:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
     shouldReceiveTouch:(UITouch *)touch {

    if ((touch.view.tag > 100)) {
        return NO;
    }
    return YES;
}

这比检查view的类要干净得多。您现在可以拥有控件,无论如何都可以识别手势。