处理多个Tap事件

时间:2012-10-23 18:28:05

标签: ios events uigesturerecognizer

我有一个UIView附加了UITapGestureRecognizer,用于在用户点击UITextFields之外时隐藏键盘。现在,我还有一些标签,当点按时显示UIPickerView。标签也使用UITapGestureRecognizer。问题在于这些事件似乎是在can自己。

点击我的标签时是否可以执行这两个事件处理程序?

谢谢。

UITapGestureRecognizer* tapForUnit = [[UITapGestureRecognizer alloc] initWithTarget:self.fridgeItemUnit action:@selector(onTap)];
[self.fridgeItemUnit addGestureRecognizer:tapForUnit];

以上代码适用于其中一个标签。我删除了视图的代码,因为我的标签会停止工作,但它完全相同,唯一不同的是它附加到self.view并且执行的函数就是这个:

-(void)dismissKeyboard:(UIGestureRecognizer*)gesture {
    [self.fridgeItemName resignFirstResponder];
    [self.fridgeItemQuantity resignFirstResponder];
}

1 个答案:

答案 0 :(得分:2)

我会从UIGestureRecognizerDelegate实现以下方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

我附上一个例子:

Screenshot

我在XIB上做的唯一一件事就是启用了用户交互。这是.m的{​​{1}}:

UIViewController

然后点击标签时,我会得到以下日志:

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];
    _viewRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTap:)];
    [_viewRecognizer setDelegate:self];
    _labelRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap:)];
    [_labelRecognizer setDelegate:self];
    [self.view addGestureRecognizer:_viewRecognizer];
    [self.label addGestureRecognizer:_labelRecognizer];
}

- (void)viewDidUnload {

    [super viewDidUnload];
    [_viewRecognizer release]; _viewRecognizer = nil;
    [_labelRecognizer release]; _labelRecognizer = nil;
    self.label = nil;
}

- (void)dealloc {
    [_viewRecognizer release];
    [_labelRecognizer release];
    self.label = nil;
    [super dealloc];
}

- (void)labelTap:(UIGestureRecognizer *)recognizer {

    NSLog(@"labelTap");
}

- (void)viewTap:(UIGestureRecognizer *)recognizer {

    NSLog(@"viewTap");
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    NSLog(@"shouldRecognizeSimultaneouslyWithGestureRecognizer");
    return YES;
}

点击视图时:

shouldRecognizeSimultaneouslyWithGestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer
labelTap
viewTap