停止从导航控制器快速导航

Posted

技术标签:

【中文标题】停止从导航控制器快速导航【英文标题】:Stop navigation from navigation controller swift 【发布时间】:2016-01-25 07:15:44 【问题描述】:

我有一个登录页面的导航控制器,登录成功后,我想关闭导航,这意味着一旦登录成功,用户就不允许返回登录页面。我试图创建另一个故事板并执行 segue,但导航栏仍然存在,无论如何以编程方式或从故事板中关闭导航栏?

我不希望“配对”按钮出现在此页面上。

【问题讨论】:

如果您想禁用后退导航,请不要在现有导航控制器上显示新的视图控制器或将其显示为根控制器,否则您不仅需要处理标准的后退按钮而且还带有边缘手势。更不用说它会让用户感到困惑。\ 如果我不提供新的视图控制器,那么我在现有的视图控制器之上应用另一个 UIView 并一直为我的应用程序堆栈? 那么导航控制器的用途就不清楚了。在不再需要的阶段用普通的 UIViewController 替换它。 【参考方案1】:

我找到了解决办法!

我在 ios 11 和 iOS 13 上对其进行了测试,它运行良好 :)

protocol CustomNavigationViewControllerDelegate 
    func shouldPop() -> Bool


class CustomNavigationViewController: UINavigationController, UINavigationBarDelegate 
    var backDelegate: CustomNavigationViewControllerDelegate?

    func navigationBar(_ navigationBar: UINavigationBar, shouldPop item: UINavigationItem) -> Bool 
        return backDelegate?.shouldPop() ?? true
    


class SecondViewController: UIViewController, CustomNavigationViewControllerDelegate 
    override func viewDidLoad() 
        super.viewDidLoad()

        (self.navigationController as? CustomNavigationViewController)?.backDelegate = self
    

    func shouldPop() -> Bool 
        if (needToShowAlert) 
            showExitAlert()
            return false

         else 
            return true
        
    

【讨论】:

【参考方案2】:

从登录页面转到导航控制器,而不是从导航控制器转到登录页面。

【讨论】:

以上是关于停止从导航控制器快速导航的主要内容,如果未能解决你的问题,请参考以下文章

停止导航控制器?从滚动到底部时出现

按下导航控制器左栏按钮时如何停止视图消失

在导航控制器之外停止 ViewController

如何以编程方式快速实例化具有嵌入式导航控制器的视图控制器?

没有导航控制器堆栈的视图控制器从一个到另一个的动画转换

标签栏第二次点击弹出到导航控制器 - 如何停止它