当工具栏超级视图具有UITapGestureRecognizers时,UIBarButton不工作?

问题描述:

我正在经历这种奇怪的行为。当工具栏超级视图具有UITapGestureRecognizers时,UIBarButton不工作?

我创建了一个干净的项目(视图模板),添加一个带有按钮的工具栏并将其与一个动作挂钩。它的工作原理;) 但是,当我添加一个UITapGestureRecognizer到我的viewcontroller视图的工具栏按钮停止工作。 (它被按下,但它的动作未被调用) 当我添加UITapGestureRecognizer时,仅调用链接到它的动作。这就像uitapgesture识别器视图隐藏工具栏,但实际上不是。

这里发生了什么?我错过了什么?

- (IBAction)itemAction{ 
    NSLog(@"%s", _cmd); 
    self.view.backgroundColor = [UIColor whiteColor]; 
} 
- (void) tapAction{ 
    NSLog(@"%s", _cmd); 
    self.view.backgroundColor = [UIColor greenColor]; 
} 
- (void)viewWasTapped:(UITapGestureRecognizer *)recognizer{ 
    if (recognizer.state == UIGestureRecognizerStateRecognized) { 
     [self tapAction]; 
    } 
} 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewWasTapped:)]; 
    [tapGestureRecognizer setNumberOfTapsRequired:1]; 
    [self.view addGestureRecognizer:tapGestureRecognizer]; 
    [tapGestureRecognizer release]; 
} 

编辑:项目源可以从here

由于事先下载的任何建议

伊格纳西奥

+0

在哪里的困惑?您的轻击手势识别器正在按按钮之前处理轻击。 – 2011-02-15 03:09:47

我终于找到了原因:

tapGestureRecognizer.cancelsTouchesInView = NO; 

我遇到了类似的问题,并发现this答案相当有用,特别是因为它允许根据被触摸的视图的类型选择性地排除手势识别器。