我正在界面构建器中创建一个带有三个ViewController的简单应用程序。现在他们按顺序出现:
FirstVC> SecondVC> ThirdVC
显示主菜单,通过界面构建器连接播放按钮以显示SecondVC(现在没有代码)。
一个简单的游戏。当游戏结束时,我以编程方式呈现ThirdVC。
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
存在。
显示一条基于消息的简单游戏。
dismiss(animated: true, completion: nil)
当我解雇这个视图控制器时,我想回到FirstVC,或者更确切地说因为SecondVC已经被解雇,玩家会自动回到FirstVC。
我该怎么做? 当然我知道如何以编程方式呈现和解散VC,但是如何在呈现新VC的同时解雇VC呢?或者这样做的正确方法是什么?
答案 0 :(得分:1)
你最好使用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