Ios 关闭所有非当前视图

Ios 关闭所有非当前视图,ios,swift,viewcontroller,presentviewcontroller,Ios,Swift,Viewcontroller,Presentviewcontroller,我一直在关注一个视频教程,该教程教我如何通过编程创建一个没有故事板的iOS应用程序 它进行得很顺利,我喜欢它的大部分东西,但是我有一个小问题 我刚刚完成了一半,我注意到了一个潜在的内存问题,教程向我展示的方式是,对于下一个视图,我都是这样呈现的: let ChooseCategoryController = ChooseCategoryViewController() present(ChooseCategoryController, animated: true, completion: ni

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

它进行得很顺利,我喜欢它的大部分东西,但是我有一个小问题

我刚刚完成了一半,我注意到了一个潜在的内存问题,教程向我展示的方式是,对于下一个视图,我都是这样呈现的:

let ChooseCategoryController = ChooseCategoryViewController()
present(ChooseCategoryController, animated: true, completion: nil)
然后我展示了另一个从那里看到的。回到过去,我也提出了另一种观点。在运行应用程序时,我注意到内存使用量在不断增加

有没有一种方法,当我呈现一个新的视图时,我可以检测哪些视图是打开的,哪些视图是关闭的

我想可能是在完成部分,但我很挣扎,因为我是新的

提前谢谢

更新1 在尝试下面的解决方案并添加self之后。按照xcode的要求,我有以下代码:

 dismiss(animated: false, completion: {
        self.present(DisplayQuestionsViewController(), animated: true, completion: nil)
    })
我得到这个警告:

警告:试图在上显示其视图不在窗口层次结构中的

如果相关的话。单击ChooseCategoryViewController()上的UICollectionView单元格时触发此代码

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

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

正如下面的海报所提到的。当前视图控制器现在确实会关闭,但不会加载新的视图控制器。

您可以,但您必须在
窗口中的所有
视图控制器中循环并删除它。我会说这很危险,真的不推荐

相反,我想提出这个建议。您可以
关闭
旧控制器,同时
提供
新控制器

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

上面的代码使用
完成
块来确保当当前的
视图控制器
被解除时,它立即
出现
下一个
我的视图控制器

谢谢,我只需要弹出。我会尝试一下,然后公布结果。如果所有作品我都会接受:)嗨,我更新了帖子。应该使用
parentViewController
来显示新的
ViewController
,因为当前的
discouse
。这也是警告试图告诉你的。最终有多种方式显示不同的视图控制器。也许你也想看看UINavigationController。有了它,你可以像大多数应用程序一样使用
push
pop
。你的更新也不起任何作用。它只关闭当前视图,但不加载第二个视图:/Any ideas?感谢您的帮助。只有当您的
ViewController
正在
中时,b@JamesG
disclose
才会起作用。当它是
窗口
rootViewController
时,它将不工作。我需要更好地理解视图层次结构,以便能够帮助您。也许这个链接会让你更好地理解: