解除所有当前视图

时间:2016-11-24 13:29:02

标签: ios swift viewcontroller presentviewcontroller

我一直在关注一个视频教程,该教程教我如何以编程方式创建没有故事板的iOS应用程序。

一切顺利,我喜欢它的大部分内容,但是我有一个小问题。

我只有一半的时间,我注意到了内存的一个潜在问题,教程向我展示的方式是,对于每个下一个视图我都这样说:

let ChooseCategoryController = ChooseCategoryViewController()
present(ChooseCategoryController, animated: true, completion: nil)

然后我从那里看到另一个。回过头来,我也提出了另一种看法。我注意到在运行应用程序时内存使用率正在上升。

有没有办法,当我提出一个新视图时,我可以检测出哪些视图是打开的并关闭所有其他视图?

我认为可能在完成部分有些东西,但我正在努力,因为我很新。

提前致谢。

UPDATE1

尝试下面的解决方案并添加自我。当xcode问我,我有这个代码:

 dismiss(animated: false, completion: {
        self.present(DisplayQuestionsViewController(), animated: true, completion: nil)
    })

我收到了这个警告:

  

警告:尝试出示< triviaGameApp.DisplayQuestionsViewController:0x7fb39481ce00> on< triviaGameApp.ChooseCategoryViewController:0x7fb392e019f0>其视图不在窗口层次结构中!

如果相关。单击ChooseCategoryViewController()

上的UICollectionView单元格时会触发此代码

更新2:

我现在已将代码更改为以下内容:

dismiss(animated: false, completion: {
        self.parent?.present(DisplayQuestionsViewController(), animated: true, completion: nil)
    })

如下面的海报所述。当前视图控制器现在解除但它不会加载新的。

1 个答案:

答案 0 :(得分:3)

您可以,但是您必须遍历viewControllers中的所有windows并将其删除。我会说它很危险,真的不推荐。

相反,我想建议一下。您dismiss旧控制器,同时present新控制器。

dismiss(animated: false, completion: {
    self.parent?.present(MyOtherViewController(), animated: true, completion: nil
})

以上代码使用completion块来确保在当前ViewController被解除时,在这种情况下立即present下一个MyOtherViewController