你如何阻止 UITapGestureRecognizer 捕捉每一次点击?

Posted

技术标签:

【中文标题】你如何阻止 UITapGestureRecognizer 捕捉每一次点击?【英文标题】:How do you stop UITapGestureRecognizer from catching EVERY tap? 【发布时间】:2011-06-20 14:50:42 【问题描述】:

您好,我有一个 opengl 视图,并且有一个标签栏。我正在使用点击识别器点击屏幕上的不同 3d 对象。在标签栏中,我有一个按钮,但它不起作用,因为点击识别器也捕捉到了这些点击。我该如何阻止这个?我已经试过了:


- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

  if ([touch.view isKindOfClass:[UIBarButtonItem class]]) return FALSE;
  return TRUE;

我认为我以某种方式比较了错误的类,因为当我调试时它总是返回 TRUE。

【问题讨论】:

您的 if 语句永远不会返回 false - 按钮不是视图...但是您可以通过调试器中的断点检查您在不同的点击位置获得的视图类型。跨度> 哦..我刚刚注意到UIBarButtonItem 不是UIView :) 谢谢。 【参考方案1】: if ([touch.view.superview isKindOfClass:[UIToolbar class]]) 返回 FALSE;

这就是我让它工作的方式。 superview是一个UIToolbar,毕竟可能是UIBarButtonIttemis a view。

【讨论】:

这适用于手势识别器视图的命中测试失败。需要明确的是,我在 UITableView 中工作,手势的位置报告为0, contentOffset - someConstant。检查触摸的视图是一个很好的解决方案。谢谢。【参考方案2】:

或者你也可以[singleTap setCancelsTouchesInView:NO]。示例:

UITapGestureRecognizer *singleTap = [
    [UITapGestureRecognizer alloc]
    initWithTarget: self
    action: @selector(yourSelector:)
];
[singleTap setCancelsTouchesInView:NO];
[[self view] addGestureRecognizer: singleTap];

【讨论】:

在界面生成器中也可以作为在视图中取消。太好了! 唯一有效的方法。就像一个魅力,我可以补充一下!没有弄乱其余的代码。谢谢!

以上是关于你如何阻止 UITapGestureRecognizer 捕捉每一次点击?的主要内容,如果未能解决你的问题,请参考以下文章

你如何阻止 Proguard 删除类型参数?

如何阻止在textarea中输入回车?

使用 swift 和 spritekit,你如何阻止场景在变得活跃/移动到前台后取消暂停?

如何阻止在线欺诈交易?F5教你应对之策

Swift 4.x/5.x 中是不是有多个全局变量副本?如果是这样,你如何阻止它?

js中啥是事件气泡,如何阻止事件气泡