Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 导航控制器如何弹出整个堆栈,包括根_Ios_Swift_Uinavigationcontroller - Fatal编程技术网

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

Ios 导航控制器如何弹出整个堆栈,包括根,ios,swift,uinavigationcontroller,Ios,Swift,Uinavigationcontroller,我正在学习协调模式。我有几个登录视图控制器。一旦用户完成登录,我想弹出整个导航堆栈,并将我的主视图控制器设置为根。这可行吗 我的一个解决方法是将一个空视图控制器设置为根,这样我就可以执行poptrootviewcontroller,然后将主vc添加为子级。但是这看起来并不干净。如果您想完全移除并替换整个堆栈,只需再次启动流 设置新的导航控制器和AppCoordinator,并将导航控制器分配给window.rootViewController。在AppCoordinator上调用start,就像

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


我的一个解决方法是将一个空视图控制器设置为根,这样我就可以执行
poptrootviewcontroller
,然后将主vc添加为子级。但是这看起来并不干净。

如果您想完全移除并替换整个堆栈,只需再次启动流

设置新的导航控制器和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()
    }

}

更改
viewControllers
属性

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

问题是怎么做?是否有可能对上一个堆栈离开屏幕的方式设置动画?就像一个淡出