Swift:如何确保没有无限的 ViewController 堆叠在一起(如果需要,如何关闭它们)? [复制]
Posted
技术标签:
【中文标题】Swift:如何确保没有无限的 ViewController 堆叠在一起(如果需要,如何关闭它们)? [复制]【英文标题】:Swift: How to make sure that no infinite ViewController are stacked on top of each other (how to dismiss them if necessary)? [duplicate] 【发布时间】:2017-12-26 20:56:54 【问题描述】:我正在界面构建器中创建一个带有三个 ViewController 的简单应用程序。现在它们按以下顺序呈现:
FirstVC > SecondVC > ThirdVC
-
第一VC
显示主菜单,通过界面生成器连接播放按钮以显示 SecondVC(目前没有代码)。
-
第二个VC
一个简单的游戏。游戏结束后,我以编程方式呈现 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 以便仅在层次结构中:
第一VC>第三VC
存在。
-
第三个VC
显示一个简单的游戏结束消息。
dismiss(animated: true, completion: nil)
当我关闭这个视图控制器时,我想回到 FirstVC,或者更确切地说,因为 SecondVC 已经被关闭,播放器会自动回到 FirstVC。
我该怎么做? 当然,我知道如何以编程方式呈现和解散 VC,但是如何在呈现新 VC 的同时解散 VC?或者这样做的正确方法是什么?
【问题讨论】:
“我当然知道如何以编程方式呈现和关闭 VC” 然后你就知道答案了。解散 SecondVC,然后呈现 ThirdVC。 这就是问题所在。它不适用于简单的 dismiss(animated: completion:) 函数。我该怎么做? 返回2级:self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)
你会那样做。但是我看不到您的代码,所以我无法提供进一步的帮助。请注意,如果您要说dismiss(animated:true)
,则必须在completion
函数中执行present
。
它实际上不是重复的,因为我不想在 FirstVC 和 SecondVC 之上显示 ThirdVC,并且当用户关闭 ThirdVC 时,ThirdVC 和 SecondVC 都会被解雇。我希望展示 ThirdVC 并同时关闭 SecondVC(好像它从未存在过,所以基本上让 ThirdVC 成为新的 SecondVC)。
【参考方案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
【讨论】:
以上是关于Swift:如何确保没有无限的 ViewController 堆叠在一起(如果需要,如何关闭它们)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章