iOS UINavigationController barHideOnTapGestureRecognizer 和 UIButton 干扰

Posted

技术标签:

【中文标题】iOS UINavigationController barHideOnTapGestureRecognizer 和 UIButton 干扰【英文标题】:iOS UINavigationController barHideOnTapGestureRecognizer and UIButton interference 【发布时间】:2015-03-19 17:43:45 【问题描述】:

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

但是,主视图包含一个 UIButton,它也会在点击时起作用。问题是两个“对象”都在接收点击,如果我点击按钮,导航栏会切换其可见性。

我可以通过导航控制器访问 barHideOnTapGestureRecognizer,但我不确定如果点击按钮,可以用它做什么来阻止它响应。

有没有办法(除了关闭或更改为“滑动隐藏”之外)在按下按钮时抑制导航栏的出现/消失?

【问题讨论】:

你尝试用 [self.navigationController setNavigationBarHidden:YES] 解决了吗? ? 嗯...谢谢...这确实有帮助。我必须将它添加到我认为的每个动作处理程序中,这有点乏味。我想知道是否有一种“全局”的方式来告诉它不要对按钮点击做出反应。 不幸的是,我不知道。我总是在需要时输入它,但如果我想出来我会在这里写。顺便说一句,我添加了我的答案:) 【参考方案1】:

不要使用标准的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)

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

【讨论】:

【参考方案2】:
[self.navigationController setNavigationBarHidden:YES];

【讨论】:

谢谢。它有帮助

以上是关于iOS UINavigationController barHideOnTapGestureRecognizer 和 UIButton 干扰的主要内容,如果未能解决你的问题,请参考以下文章

使用 UINavigationController 从另一个控制器更新或重新加载 UIViewController?

带有标签栏的 presentViewController

将 managedObjectContext 发送到 viewController 崩溃

如何正确关闭作为模式呈现的 UINavigationController?

ID:[...] 的 NSManagedObject 已失效

在 UINavigationController 中设置时图像不显示