关闭所有没有当前视图

问题描述:

我一直在沿着一个视频教程,这是教我关于以编程方式创建一个没有故事板的iOS应用程序。关闭所有没有当前视图

它进展顺利,我喜欢它的大部分事情,但是我有一个小问题。

我只是中途,我已经注意到内存一个潜在的问题,本教程已经表明我的方式是,每一个视图我提出它像这样:

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

,然后我提出另一个从那里看。回到我还提出另一种观点。我注意到在运行应用程序时,内存使用量正在增加。

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

我想也许是在完成部分的东西,但我很挣扎,因为我比较新。

在此先感谢。

更新1

尝试下面的解决方案并添加到自我。作为Xcode的问我我有这样的代码:

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

我得到这样的警告:

警告:试图提出< triviaGameApp.DisplayQuestionsViewController:上< triviaGameApp.ChooseCategoryViewController 0x7fb39481ce00>:0x7fb392e019f0>谁的观点不在窗口层次结构中!

如果它是相关的。

我现在已经改变了代码如下:

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

正如下面的海报提到这个代码在UICollectionView细胞对ChooseCategoryViewController点击()

更新2解雇。目前的视图控制器现在消除,但它不加载新的视图控制器。

您可以,但您必须循环浏览windows中的所有viewControllers并将其删除。我会说这是危险的,真的不推荐。

相反,我想提出这个建议。你dismiss你的旧控制器,并在同一时间present一个新的。

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

上面的代码使用completion块,以确保当电流ViewController被驳回,它立即present在这种情况下,下一个MyOtherViewController

+0

谢谢,我只需要弹出。我会给出一个尝试和发布结果。如果所有的作品,我会接受:) – JamesG

+0

请看原来的帖子更新。 :) – JamesG

+0

嗨,我更新了这篇文章。应该使用'parentViewController'来代替当前的'ViewController',因为它正在被'解雇'。这也是警告试图告诉你的。 –