Swift Navigation 如何pop到导航栈中指定的ViewController?
实现pop到导航栈指定ViewController的方案
UINavigationController 提供了原生API popToViewController(_:animated:) 支持跳转到栈内任意已存在的控制器,核心逻辑是先获取目标控制器的实例,再传入该方法调用即可,常用实现场景分以下几种:
场景1:已持有目标控制器的实例引用
直接调用API即可,注意增加判空逻辑避免崩溃:if let targetVC = yourTargetViewControllerInstance { navigationController?.popToViewController(targetVC, animated: true) }场景2:仅知道目标控制器的类名,需要先从导航栈查找
遍历导航控制器的viewControllers属性(存储了完整的栈控制器列表),匹配到对应类的实例后再执行pop:// 将TargetViewController替换为你实际的目标控制器类名 if let targetVC = navigationController?.viewControllers.first(where: { $0 is TargetViewController }) { navigationController?.popToViewController(targetVC, animated: true) }场景3:明确知道目标控制器在导航栈的索引位置
可以直接通过下标取值,注意先判断索引合法性避免数组越界:guard let nav = navigationController, nav.viewControllers.count > targetIndex else { return } let targetVC = nav.viewControllers[targetIndex] nav.popToViewController(targetVC, animated: true)
注意:如果传入的控制器不在当前导航栈的
viewControllers数组中,调用该方法会直接触发崩溃,所有调用前一定要做好存在性校验。
内容的提问来源于stack exchange,提问作者Punreach Rany
相关产品推荐
相关产品推荐

