在子视图上禁用从父视图接收触摸

问题描述 投票:15回答:3

我有一个UIView parentView,它实现了UITapGuestureRecognizer并在点击时会执行某些操作。 parentView有一个称为childView的子视图,该子视图也实现了UITapGuestureRecognizer并在点按时执行某些操作。

[在某些情况下,我必须在动画中关闭childViews UITapGestureRecognizer一会儿,并且我注意到当关闭它并点击childView时,点击被parentView截获。 。另外,我在该视图的顶部附加了一个工具栏,该工具栏未附加任何手势识别器,并且触摸了父视图(按钮几乎无法使用)。我想知道是否可以在不参考父母UITapGestureRecognizer的情况下禁用此功能?

我尝试使用exclusiveTouchesUIView属性设置为yes,但它不起作用。任何建议,将不胜感激。

iphone objective-c ios cocoa-touch uigesturerecognizer
3个回答
25
投票

在父手势识别器中,实现UIGestureRecognizerDelegate,并实现以下方法:

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

ClassThatYouWantTouchesBlocked替换为您希望忽略其触摸的类。


1
投票

如果永不关闭 ChildView的点击手势识别器怎么办?如果它正在动画化孩子的轻击手势方法返回的内容,则不执行任何操作。

如果它是imageView,则可能会使用isAnimating属性。


0
投票

向手势儿童添加手势识别器。

self.blockerView.addGestureRecognizer(UITapGestureRecognizer())
© www.soinside.com 2019 - 2024. All rights reserved.