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

问题描述 投票:-1回答:1

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

我在界面构建器中创建了一个带有三个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呢?或者这样做的正确方法是什么?

ios swift uiviewcontroller presentviewcontroller dismissviewcontroller
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.