navigationBar:shouldPop未按预期运行

时间:2018-02-16 01:19:32

标签: ios swift uinavigationcontroller uinavigationbar

为了在UINavigationController上按下后退按钮时执行某些验证。 在网上搜索了如何做之后,我决定继承UINavigationController并实现UINavigationBarDelegate

这是我的问题: 只要我实际上没有实现UINavigationBarDelegate协议的任何内容,它就像我使用普通UINavigationController时一样。但是当我只实现这个功能时:

    func navigationBar(_ navigationBar: UINavigationBar,
                   shouldPop item: UINavigationItem) -> Bool {
        print(#function)
        return true
    }

我可以在调试控制台中看到该函数实际被调用。但流行不会发生,只有后退按钮消失,视图停留在那里。我希望只有上面的函数它仍然可以像以前一样工作(即视图应该正常弹出)。

任何人都可以看到我遗失的东西?

2 个答案:

答案 0 :(得分:0)

您可以创建一个后退按钮并在此按钮的操作中添加下面的代码,该按钮将调用上一个视图,就好像它是导航栏的背面一样。在此按钮的操作中,您可以添加您想要的操作,如果您有任何问题,我可以在viewDidLoad()中调用隐藏按钮

// Action    
self.navigationController?.popViewController(animated: true)

// Hide backbutton
self.navigationController?.navigationItem.hidesBackButton = true

答案 1 :(得分:0)

您缺少弹出视图控制器,请在代码中再添加一行self.popViewController(animated: true)

func navigationBar(_ navigationBar: UINavigationBar,
                       shouldPop item: UINavigationItem) -> Bool {
    print(#function)
    self.popViewController(animated: true)
    return true
}