禁用从子视图的父视图接收触摸

时间:2012-05-25 06:11:36

标签: iphone objective-c ios cocoa-touch uigesturerecognizer

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

有一个例子,我必须在动画片中暂时关闭childViews UITapGestureRecognizer,我注意到它关闭后我点按childView,点击被parentView拦截。此外,我有一个工具栏附加到此视图的顶部,没有附加任何手势识别器,它的触摸通过parentView(按钮几乎不起作用)。我想知道是否有可能在没有引用父母UITapGestureRecognizer的情况下禁用它?

我尝试使用exclusiveTouches的{​​{1}}属性设置为yes,但它不起作用。任何建议将不胜感激。

3 个答案:

答案 0 :(得分:24)

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

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

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

答案 1 :(得分:1)

如果永远不会关闭 ChildView的点击手势识别器怎么办?如果它是动画从孩子的轻击手势方法返回而不做任何事情。

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

答案 2 :(得分:0)

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

self.blockerView.addGestureRecognizer(UITapGestureRecognizer())