添加一个新的根视图控制器

时间:2019-12-07 09:32:49

标签: ios swift

我正在开发一个具有登录页面的IOS应用程序。当用户首次打开应用程序时,我希望“登录”页面一开始就显示。

用户登录后,我想更改root并将其分配给“ MainViewController”(登录完成后用户到达的位置)

之所以要这样做,是因为我想经常清除应用程序中的后向堆栈。

现在问题出在..当我点击注销按钮时,应用程序应再次导航到登录页面。我怎样才能很好地做到这一点?

有什么方法可以清除后台堆栈而无需返回到根控制器吗?

任何输入将不胜感激。

SigninViewController

    func navigateToMain(){
    if let storyboard = storyboard{
        let vc = storyboard.instantiateViewController(withIdentifier: "TabViewController") as! TabViewController

        UIApplication.shared.windows.first?.rootViewController = vc

        self.present(vc, animated: true)
    }
}

我可以使用注销方法来导航回登录并清除后退堆栈吗?

1 个答案:

答案 0 :(得分:0)

当用户按注销时,应将登录视图控制器设置为根视图控制器。更改根视图控制器时,将清除所有以前的导航堆栈。

您可以使用此代码淡入淡出动画来更改根视图控制器。

    func makeRootVC(storyBoardName : String, vcName : String) {
    let vc = UIStoryboard(name: storyBoardName, bundle: Bundle.main).instantiateViewController(withIdentifier: vcName)
    let nav = UINavigationController(rootViewController: vc)
    nav.navigationBar.isHidden = true
    self.window?.rootViewController = nav
    let options: UIView.AnimationOptions = .transitionCrossDissolve
    let duration: TimeInterval = 0.6
    UIView.transition(with: self.window!, duration: duration, options: options, animations: {}, completion: nil)
}

注意:将此函数复制到Appdelegate.swift文件中,然后在视图控制器中,您可以像这样使用它:

@IBAction func logoutBtnPressed(_ sender : Any) { 
  let appDelegateObj = UIApplication.shared.delegate as! AppDelegate
  appDelegateObj.makeRootVC(storyboardName: "Main", vcName : "YourLoginVC")
}