2011-05-10 100 views
1

我的视图有一个带有两个UIBarButtonItem类型按钮的工具栏。我试图实现一个手势识别器,当我点击视图中除了工具栏之外的任何地方时,我会调用一个选择器。点击工具栏上的条形按钮项应该调用该按钮的动作方法。视图符合UIGestureRecognizerDelegate协议和如下实现shouldReceiveTouch方法:在iOS中,如何禁止在工具栏中识别手势?

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
               shouldReceiveTouch:(UITouch *) touch { 
    // Disallow recognition of tap gestures in the toolbar 
    if ((touch.view == self.sideOneBarButton.customView) && 
     (gestureRecognizer == self.tapRecognizer)) { 
    return NO; 
    } 
    return YES; 
} 

的问题是,当我工具栏上的按钮点击,touch.viewUTToolbarTextButton*类型,其是一个未记录的类的,所以我的如果语句失败并且shouldReceiveTouch总是返回YES,并且我的按钮事件永远不会被调用。

理想情况下,我想说:如果触摸位于工具栏中的任何位置,则返回no。什么是最好的方法来做到这一点?

+0

我刚刚发现http://stackoverflow.com/questions/3344341/uibutton-inside-a-view-that-has-a-uitapgesturerecognizer其中有我一直在寻找的答案。谢谢! – LandedGently 2011-05-10 00:36:19

+0

请将该链接添加到自己的问题答案中,并尽快接受,以避免无答案的问题。 – Till 2011-05-10 01:36:25

回答

0

有一种方法可以忽略任何不是您的中心视图的手势。

比如我有:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] 
           initWithTarget:self 
           action:@selector(dismissKeyboard)]; 

tap.delegate = self; 

[self.view addGestureRecognizer:tap]; 

手势委托添加到类:

@interface myClass : UIViewController<..,UIGestureRecognizerDelegate,..> 

,现在委托函数:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if (touch.view == self.view) 
    { 
     return YES; 
    } 
    return NO; 
} 

这已经制定了我当我因手势而无法使用UIToolbar时

而且,@LandedGently已经提到,这里有更多的信息:

UIButton inside a view that has a UITapGestureRecognizer

这样的人不要错过在评论的链接。

1

关于委托功能,这对我很好。

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