在iOS中,如何禁止工具栏中的手势识别?

在iOS中,如何禁止工具栏中的手势识别?,ios,uitoolbar,uigesturerecognizer,Ios,Uitoolbar,Uigesturerecognizer,“我的视图”有一个带有两个按钮的工具栏,类型为UIBarButtonItem。我正在尝试实现一个手势识别器,这样当我点击视图中除工具栏外的任何位置时,我就会调用选择器。点击工具栏中的条形按钮项应调用该按钮的操作方法。视图符合UIgestureRecognitizerDelegate协议,并实现shouldReceiveTouch方法,如下所示: -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer

“我的视图”有一个带有两个按钮的工具栏,类型为
UIBarButtonItem
。我正在尝试实现一个手势识别器,这样当我点击视图中除工具栏外的任何位置时,我就会调用选择器。点击工具栏中的条形按钮项应调用该按钮的操作方法。视图符合
UIgestureRecognitizerDelegate
协议,并实现
shouldReceiveTouch
方法,如下所示:

-(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.view
的类型是
uttoolbertextbutton*
,这是一个未记录的类,因此我的if语句失败,
shouldReceiveTouch
总是返回YES,我的按钮事件永远不会被调用


理想情况下,我想说:如果触摸在工具栏中的任何位置,则返回否。执行此操作的最佳方法是什么?

有一种方法可以忽略任何非中心视图上的手势

例如,我有:

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

tap.delegate = self;

[self.view addGestureRecognizer:tap];
将手势委托添加到类:

@interface myClass : UIViewController<..,UIGestureRecognizerDelegate,..>
当我因为这个手势而无法使用UIToolbar时,这对我来说是可行的

此外,正如@LandedGently所提到的,这里有更多信息:


因此,人们不会错过评论中的链接。

有一种方法可以忽略任何不是你中心视图的东西上的手势

例如,我有:

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

tap.delegate = self;

[self.view addGestureRecognizer:tap];
将手势委托添加到类:

@interface myClass : UIViewController<..,UIGestureRecognizerDelegate,..>
当我因为这个手势而无法使用UIToolbar时,这对我来说是可行的

此外,正如@LandedGently所提到的,这里有更多信息:


因此,人们不会错过评论中的链接。

关于委派功能,这对我很好

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

关于委托函数,这对我有好处

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

我刚刚发现了我想要的答案。谢谢请在您的问题的自述答案中添加该链接,并尽快接受该链接,以防止出现没有答案的问题。我刚刚发现哪个有我想要的答案。谢谢请在您的问题的自述答案中添加该链接,并尽快接受该链接,以防止出现没有答案的问题。