首页 > 解决方案 > 在导航堆栈中重用相同视图控制器的问题 | 迅速

问题描述

本质上,我有 4 个视图控制器,它们使用以下代码从一个切换到下一个:

let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "viewcontroller1") as! viewcontroller1       
controller.navigationItem.setHidesBackButton(true, animated: true)
controller.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Close", style: .done, target: self, action: #selector(self.closeAction))
self.navigationController?.pushViewController(controller, animated: true)

在我必须从viewcontroller4back 切换到viewcontroller1. 我不需要重复使用它viewcontroller1,而是调用它的新版本。在推送时,我如何重置导航堆栈并调用新版本的viewcontroller1?

标签: swift

解决方案


您可以像这样重置整个堆栈(使用您的选项增加一些额外的安全性):

if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "viewcontroller1") as? viewcontroller1 {
  self.navigationController?.setViewControllers([controller], animated:false)
}

关键是setViewControllers(_:animated:)。如果由于某种原因您确实想再次重用您的第一个控制器,您可以查看popToRootController().UINavigationController


推荐阅读