导航控制器如何弹出整个堆栈,包括根

时间:2018-07-05 13:12:29

标签: ios swift uinavigationcontroller

我正在学习协调器模式。我有几个登录视图控制器。用户完成登录后,我想弹出整个导航堆栈并将主视图控制器设置为根。可以吗?

我要解决的一个问题是将一个空的视图控制器设置为根,因此我可以执行popToRootViewController,然后将主vc添加为子级。但这看起来并不干净。

2 个答案:

答案 0 :(得分:0)

如果要完全卸下并更换整个堆栈,只需重新开始流程即可。

设置新的导航控制器和AppCoordinator,然后将导航控制器分配给window.rootViewController。就像在启动时一样,在AppCoordinator上调用start,并且有一个新堆栈。

您可以在AppCoordinator上添加一个方法来为您处理

class AppCoordinator: Coordinator, NSObject {

    var navigationController: UINavigationController

    init(navigationController: UINavigationController) {
        self.navigationController = navigationController
    }

    func start() {
       let vc = MainViewController()
       navigationController.setViewControllers([vc], animated: true)
    }

    func resetNavigationStack() {

        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
            return
        }

        navigationController = UINavigationController()
        appDelegate.window = navigationController
        start()
    }

}

答案 1 :(得分:0)

更改viewControllers属性

 let vc = ///
 self.navigationController?.viewControllers = [vc]