如何在某些情况下使用hitTest:withEvent:从导航栏向底层视图发送触摸?

时间:2013-08-07 00:05:22

标签: ios objective-c uiview uinavigationcontroller uinavigationbar

长话短说,如果我的UINavigationBar的alpha设置为0,我希望所有触摸转到底层视图(从视图控制器的角度来看,导航栏只是{{ 1}})。如果它是self.view,我希望它能保留它们。

我将UINavigationBar子类化了,我试图覆盖1.0,但我真的很困惑我正在做的事情,而且搜索一直没有什么帮助。

如何判断,“如果alpha为0,请将触摸发送到hitTest:withEvent:,否则请保留导航栏”?

2 个答案:

答案 0 :(得分:2)

您需要将视图的引用发送到导航栏,将其设置为名为behindView的属性或其他内容。

if(self.alpha == 0.0f)
{
    return behindView;
}
return [super hitTest:point withEvent:event];

另一种方法是覆盖pointInside:withEvent:,如下所示:

if(self.alpha == 0.0f)
{
    return NO;
}
return [super pointInside:point withEvent:event];

答案 1 :(得分:0)

Swift 4 版本。

代码:

class NavigationBar: UINavigationBar {

    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        if self.alpha == 0 {
            return false
        }
        return super.point(inside: point, with: event)
    }

}