Swift:如何确保没有无限的ViewController堆叠在一起(如果需要,如何解除它们)? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift:如何确保没有无限的ViewController堆叠在一起(如果需要,如何解除它们)? [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我在界面构建器中创建了一个带有三个ViewController的简单应用程序。现在它们按此顺序显示:
FirstVC> SecondVC> ThirdVC
- FirstVC
显示主菜单,通过界面构建器连接播放按钮以显示SecondVC(现在没有代码)。
- SecondVC
一个简单的游戏。当游戏结束时,我以编程方式呈现第三个C.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "GameOverScreen") as UIViewController
vc.modalPresentationStyle = UIModalPresentationStyle.currentContext
vc.modalTransitionStyle = .crossDissolve
self.present(vc, animated: true, completion: nil)
在呈现ThirdVC之前(或同时),我想要关闭SecondVC,以便仅在层次结构中:
FirstVC> ThirdVC
存在。
- ThirdVC
显示一条简单的游戏消息。
dismiss(animated: true, completion: nil)
当我解雇这个视图控制器时,我想回到FirstVC,或者更确切地说因为SecondVC已经被解雇,玩家会自动回到FirstVC。
我怎样才能做到这一点?当然我知道如何以编程方式呈现和解散VC,但是如何在呈现新VC的同时解雇VC呢?或者这样做的正确方法是什么?
答案
你最好使用navigationcontroller,当推送ThirdVC时,在它的viewDidLoad中执行此操作
func optimizeNavigation()
{
let viewControllers: [UIViewController] = self.navigationController!.viewControllers ;
print("before optimize (viewControllers.count)")
for aViewController in viewControllers
{
if(aViewController is SecondVC)
{
aViewController.removeFromParentViewController()
}
}
let viewControllers2: [UIViewController] = self.navigationController!.viewControllers ;
print("after optimize (viewControllers2.count)")
}
这样,当您在ThirdVC中弹出时,您将返回到FirstVC
以上是关于Swift:如何确保没有无限的ViewController堆叠在一起(如果需要,如何解除它们)? [重复]的主要内容,如果未能解决你的问题,请参考以下文章