【问题标题】:In iOS, How to disallow gesture recognition in the toolbar?在 iOS 中,如何在工具栏中禁止手势识别?
【发布时间】:2014-10-30 16:08:41
【问题描述】:

我的视图有一个带有两个UIBarButtonItem 类型按钮的工具栏。我正在尝试实现一个手势识别器,这样当我点击视图中除工具栏外的任何位置时,我都会调用一个选择器。点击工具栏中的条形按钮项应调用该按钮的操作方法。视图符合UIGestureRecognizerDelegate协议,实现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 的类型为 UTToolbarTextButton*,这是一个未记录的类,所以我的 if 语句失败,shouldReceiveTouch 总是返回 YES,我的按钮事件永远不会被调用.

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

【问题讨论】:

  • 我刚刚发现 stackoverflow.com/questions/3344341/… 有我正在寻找的答案。谢谢!
  • 请在您的问题的自写答案中添加该链接并尽快接受,以防止出现没有答案的问题。

标签: ios uitoolbar uigesturerecognizer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    例如我有:

    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

    所以人们不会错过 cmets 中的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多