导航控制器如何弹出整个堆栈,包括根
Posted
技术标签:
【中文标题】导航控制器如何弹出整个堆栈,包括根【英文标题】:Navigation controller how to pop entire stack, including root 【发布时间】:2018-07-05 13:12:28 【问题描述】:我正在学习协调器模式。我有几个登录视图控制器。一旦用户完成登录,我想弹出整个导航堆栈并将我的主视图控制器设置为根。可行吗?
我的解决方法是将一个空的视图控制器设置为根,所以我可以做popToRootViewController
,然后将 main vc 添加为子级。但这看起来并不干净。
【问题讨论】:
问题是如何? 【参考方案1】:更改viewControllers
属性
let vc = ///
self.navigationController?.viewControllers = [vc]
【讨论】:
是否可以为上一个堆栈离开屏幕的方式设置动画?就像淡出【参考方案2】:如果您想完全移除并替换整个堆栈,只需重新启动流程即可。
设置一个新的导航控制器和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()
【讨论】:
以上是关于导航控制器如何弹出整个堆栈,包括根的主要内容,如果未能解决你的问题,请参考以下文章
如何从导航堆栈中推送/弹出uiviewcontroller时收到警报