关闭所有没有当前视图
问题描述:
我一直在沿着一个视频教程,这是教我关于以编程方式创建一个没有故事板的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
。
谢谢,我只需要弹出。我会给出一个尝试和发布结果。如果所有的作品,我会接受:) – JamesG
请看原来的帖子更新。 :) – JamesG
嗨,我更新了这篇文章。应该使用'parentViewController'来代替当前的'ViewController',因为它正在被'解雇'。这也是警告试图告诉你的。 –