我一直在寻找解决方案很长一段时间,但我仍然没有看到最佳解决方案是什么: 我正在尝试以编程方式交换视图控制器,故事板中没有任何内容,纯粹的swift文件。
据我所知presentViewController()
只是创建了一个'模式'这将导致前一个ViewController留在内存中(经过测试,deinit
永远不会为第一个控制器触发)。我找到的解决方案是切换rootViewController:self.view.window?.rootViewController = ViewController2()
- >这会激发第一个deinit
。
虽然这个解决方案在理论上有效,但我想知道......
viewRootController
的价值?非常感谢!
编辑:我将添加:我的测试应用程序不应该为不同的viewcontrollers提供任何类型的导航(没有标签,也没有类似的东西)。它基本上像screen1-> screen2-> screen3-> screen4一样工作。如果按下重置按钮,它将返回到screen1。我纯粹对交换ViewControllers感兴趣,没有别的。答案 0 :(得分:0)
1:更改主窗口的根视图控制器对于交换视图控制器是正确的。
2:通常,不使用交换视图控制器。您可以使用具有根视图控制器(例如主屏幕)的导航控制器,然后根据需要推送其他视图控制器。标签栏视图控制器也非常有用。 https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/CombiningViewControllers.html#//apple_ref/doc/uid/TP40011313-CH6-SW1
希望这有帮助!
答案 1 :(得分:0)
1。 基本方法是:
navigationController?.popViewControllerAnimated(true)
或只是弹出到根视图
navigationController?.popToRootViewControllerAnimated(true)
推动可以类似地完成
或设置新筹码
navigationController?.setViewControllers([viewController], animated: true)
这些是在代码中导航的推荐方法,只需选择适合您特定情况的方法。
推送和弹出机制可能是最常用的一般导航方式。
浏览主视图时使用导航控制器。模态视图可以用作视图的侧视图或扩展,以模态方式呈现该视图。
修改强> 有很多方法可以通过应用程序导航效率。在这种特殊情况下,推送和弹出导航堆栈可能是最好的方法。但请记住,有Tab栏控制器,集合视图和其他。在一天结束时最好是查看您的应用程序结构,并根据该结构决定哪种导航方法最适合您。