添加优先于所有其他交互的 UIGestureRecognizer

Posted

技术标签:

【中文标题】添加优先于所有其他交互的 UIGestureRecognizer【英文标题】:Adding a UIGestureRecognizer taking priority over all other interactions 【发布时间】:2015-10-20 03:56:46 【问题描述】:

当我点击UIButton 时,UIView MyView 从底部出现,覆盖了屏幕的三分之一。我希望当我点击该视图之外的某个位置时,它会消失。

我曾考虑在 MyView 下方添加另一个透明的 UIView,并在其上添加一个带有关闭功能的标签手势,但我确信还有比这更干净的东西。

所以我考虑在UIViewControllerself.view 上添加点击手势MyTapGesture 来关闭MyView。问题是,在这个视图之外,我还有其他 UIControls 和手势,它们可以同时捕获任何触摸,而不是 MyTapGesture。

如何使 MyTapGesture 成为 MyView 之外的优先手势,而忽略所有其他手势、点击等...?

【问题讨论】:

您有两个点击手势菜单? 菜单?是的,我在 self.view 的子视图上有一个点击手势。在这种情况下,两者都被触发。但是当我点击 UIButton 时,只会触发 UIButton 的点击。 这个问题解决了吗? 真的没有。点击 UIButtons 时我仍然遇到问题。我通过在我的视图下方添加一个透明视图来修复它,但如果你有正确的方法,请告诉我。 【参考方案1】:

您可能必须使用手势委托方法来处理两个tapGestureRecognizer 根据场景激活您需要的一个

#pragma mark - UIGestureRecognizerDelegate methods
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer 

return YES;


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
   if ([tapGestureRecognizer1 isEqual:gestureRecognizer]) 

   return [tapGestureRecognizer2 isEqual:otherGestureRecognizer];
   

 if ([tapGestureRecognizer2 isEqual:gestureRecognizer]) 

return [tapGestureRecognizer1 isEqual:otherGestureRecognizer];


return NO;

【讨论】:

这意味着您需要为每个 UIGesture 设置委托...好吧,假设我这样做,问题仍然存在于点击 UIButtons

以上是关于添加优先于所有其他交互的 UIGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

UIPanGestureRecognizer 是不是优先于 -touchesMoved: 方法?

在 Python 中,为啥属性优先于实例属性?

visualstudiocode颜色代码起冲突的时候优先于哪个

如何解决“允许属性将优先于allowfullscreen”警告?

Bootstrap 样式优先于自定义 CSS

Servlet 过滤器(自动登录)优先于声明性安全检查