我正在学习协调器模式。我有几个登录视图控制器。用户完成登录后,我想弹出整个导航堆栈并将主视图控制器设置为根。可以吗?
我要解决的一个问题是将一个空的视图控制器设置为根,因此我可以执行popToRootViewController
,然后将主vc添加为子级。但这看起来并不干净。
答案 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]