Swift:如何确保没有无限的ViewController堆叠在一起(如果需要,如何解除它们)? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift:如何确保没有无限的ViewController堆叠在一起(如果需要,如何解除它们)? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我在界面构建器中创建了一个带有三个ViewController的简单应用程序。现在它们按此顺序显示:

FirstVC> SecondVC> ThirdVC

  1. FirstVC

显示主菜单,通过界面构建​​器连接播放按钮以显示SecondVC(现在没有代码)。

  1. 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

存在。

  1. 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堆叠在一起(如果需要,如何解除它们)? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 spriteKit swift 4 中制作无限背景

swift-如何确保最初在哪个协议或类型中定义了特定属性?

中国如何在被踢出SWIFT系统情况下确保本国金融安全?

我如何确保Producer和Consumer线程一个接一个地无限运行?

Swift:Xcode tableView 无限滚动

在 Swift 中使用 UIScrollView 进行无限循环滚动