swift - 在导航堆栈中重用相同视图控制器的问题 | 迅速
问题描述
本质上,我有 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)
在我必须从viewcontroller4
back 切换到viewcontroller1
. 我不需要重复使用它viewcontroller1
,而是调用它的新版本。在推送时,我如何重置导航堆栈并调用新版本的viewcontroller1
?
解决方案
您可以像这样重置整个堆栈(使用您的选项增加一些额外的安全性):
if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "viewcontroller1") as? viewcontroller1 {
self.navigationController?.setViewControllers([controller], animated:false)
}
关键是setViewControllers(_:animated:)
。如果由于某种原因您确实想再次重用您的第一个控制器,您可以查看popToRootController()
.UINavigationController
推荐阅读
- javascript - user.roles.map 抛出无法读取未定义 Discord.js 的地图
- javascript - 如何在全日历中更改时隙格式
- excel - 在子过程中传递类模块的实例
- python - Django将图像保存到数据库
- sqlite - 尝试将带有破折号的 JSON 字符串从 Tcl 传递到浏览器,但无法解析?
- python - 如何使用 tf.keras.Model.summary 和 plot_model 查看子模型的层,而不是看到模型打印最终的顺序层?
- mysql - 美国的产品组在 SQL 中没有销售
- ckeditor - 使用 dropzone.js 时无法保存 CKEditor 的数据
- vim - 有时 Vim 开始忽略 Ctrl 键上的映射
- node.js - 为什么我的 digitalocean 液滴不会从我的 API 请求中返回任何内容