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

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

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

【问题讨论】:

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

标签: swift uinavigationcontroller uinavigationbar


【解决方案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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多