swift - 使用 present 创建时,防止 ViewController 在后台堆叠
问题描述
我使用此代码打开一个新的 ViewController:
// Get a random next post
@IBAction func buttonNextPostTapped(_ sender: UIButton) {
let postNumber = Int.random(in: 0 ..< postIds.count)
let postId = postIds[postNumber]
PostApi.shared.getPost(postId: postId) { (post) in
let storyBoard : UIStoryboard = UIStoryboard(name: "MainApplication", bundle: nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "PostsViewController") as! PostsViewController
nextViewController.post = post
nextViewController.isFromRandom = true
self.present(nextViewController, animated: true, completion: {})
}
}
此代码将使用不同的数据打开相同的 ViewController。它可以工作,但是,“旧”视图控制器将在后台堆叠。所以如果我打开 10 个新的 ViewControllers,我在后台有 10 个 VC。
我怎样才能呈现一个新的 ViewController,并关闭“旧”的?
解决方案
使用setViewControllers
函数 fromUINavigationController
是最好的方法。
func setViewControllers(_ viewControllers: [UIViewController], animated: Bool)
您可以从堆栈中删除您想要的任何控制器,例如
if var navigationControllersArray:Array = (self.navigationController?.viewControllers) {
navigationControllersArray.remove(at: navigationControllersArray.count-2)
self.navigationController?.viewControllers = navigationControllersArray
}
推荐阅读
- java - 来自 KieSession.startProcess 的 UnsupportedOperationException
- mongodb - 在 mongodb 中使用 $inc express 路由的问题
- swift4.1 - 访问类内的私有数组时出错
- json - 我是否需要一个 for 循环才能使用 Groovy JsonSlurper 在 json 中查找键/值?
- ms-access - 我的 Dlookup 语法有什么问题?
- javascript - 使用 jQuery 从外部 XML url 抓取信息
- ansible - 以编程方式识别 Ansible 剧本
- javascript - JQuery 过滤器库:组合两个过滤器?
- git - 将 ssh 与 https 与 github 子模块一起使用
- python - 在 MATLAB 或 Python 中进行数据操作