iOS UINavigationController barHideOnTapGestureRecognizer 和 UIButton 干扰

标签 ios iphone uinavigationcontroller uibutton uinavigationbar

我开发了一款应用,它利用 iOS8 功能在点击 View 时显示或隐藏导航栏。

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

我可以通过导航 Controller 访问 barHideOnTapGestureRecognizer,但不太确定可以用它做什么来阻止它在点击按钮时响应。

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

最佳答案

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

点击 View 将显示/隐藏栏,点击控件( View 的 subview )则不会。

关于iOS UINavigationController barHideOnTapGestureRecognizer 和 UIButton 干扰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29151517/

相关文章:

iphone - 如何为 Xcode 构建和编译 PJSIP,使用示例代码 IPJSUA 进行测试?

ios - Siri 集成 : Audio call using Siri?

iphone - 将对象图持久化以在 iPhone 上闪烁的最佳方式

iphone - NSDate对象显示错误的时间

ios - 当 View Controller 弹出或插入导航 Controller 堆栈时如何获得通知

iOS - 尺寸类别的不同堆栈 View

ios - 是否可以在 Swift 中覆盖 UIButton 的操作方法?

iphone - 将视频保存到照片库 - iPhone SDK

ios - 推送 View Controller ,但返回另一个

ios - 快速更改导航栏颜色时出现覆盖