iOS UINavigationController barHideOnTapGestureRecognizer 和 UIButton 干扰问题

3
我开发了一个应用程序,利用iOS8的功能,在单击视图时显示或隐藏导航栏。

然而,主视图包含一个UIButton,它也会响应点击。问题是两个“对象”都接收到了点击事件,如果我点击按钮,导航栏会切换其可见性。

我可以通过导航控制器访问 barHideOnTapGestureRecognizer,但不太确定如何使用它来阻止它响应按钮的点击事件。

除了关闭或更改为“滑动隐藏”外,是否有一种方法可以在按下按钮时抑制导航栏的出现/消失?


你尝试过使用 [self.navigationController setNavigationBarHidden:YES]; 来解决吗? - miletliyusuf
嗯...谢谢...这确实有帮助。只是我必须将它添加到视图中的每个操作处理程序中,有点繁琐。我想知道是否有一种“全局”的方法来告诉它不要对按钮点击做出反应。 - Fittoburst
不幸的是,我不知道有没有这种东西。每当我需要时,我总是打这个,但如果我想到了,我会在这里写下来。顺便说一句,我添加了我的答案 :) - miletliyusuf
2个回答

2

不要使用标准的barHideOnTapGestureRecognizer手势识别器。幸运的是,自己制作也不难:

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    let gestureRecognizer = UITapGestureRecognizer(target: self, action: "toggleBarsOnTap:")
    self.view.addGestureRecognizer(gestureRecognizer)
}

func toggleBarsOnTap(sender: AnyObject?) {
    let hidden = !self.navigationBarHidden
    self.setNavigationBarHidden(hidden, animated: true)
    self.setToolbarHidden(hidden, animated: true)
}

点击视图将显示/隐藏栏,而点击控件(视图的子视图)不会。

1
[self.navigationController setNavigationBarHidden:YES];

谢谢。这很有帮助。 - Fittoburst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接