我正在创建一个应用程序,它显示 PageVC:UIPageViewController 作为简介和应用指南。 浏览完介绍后,下一步按钮会导致" SettingsVC "用于存储应用程序的默认设置。 设置必须由用户初始选择,但稍后可以更改。
PageVC ---> SettingsVC
设置视频上的保存和取消按钮会导致该应用的 MainVC 。
MainVC 上的按钮会转到 SettingsVC 。
SettingsVC< ---> MainVC
该应用程序的工作方式如下:
if isFirstLaunch{
instantiate PageVC
}else{
instantiate MainVC
}
PageVC中的
nextButtonPressedinPageVC{
instantiate SettingsVC
}
在SettingsVC中
if saveButtonPressed && cameFromPageVC{
instantiate MainVC
}
if cancelButtonPressed && cameFromPageVC {
do Nothing
}
if saveButtonPressed && cameFromMainVC{
dismiss currentVC
}
if cancelButtonPressed && cameFromMainVC {
dismiss currentVC
}
MainVC中的
if settingsButtonPressedinMainVC {
instantiate SettingsVC
}
我确保如果它是应用程序的第一次启动, PageVC 将被实例化,否则将实例化MainVC。
如何在没有可能的内存泄漏的情况下在viewControllers之间移动,即 performSegue 的位置以及解除当前VC的位置?
请提供参考代码。
答案 0 :(得分:1)
有很多方法可以做到这一点,这是一个我觉得很简单的方法,因为你可以在你的Storyboard中完成大部分工作: 将您的MainVC视为rootViewController,将其他两个视为仅暂时显示的附件视图。 MainVC应该始终是您的入口点,因此将其设置为Storyboard中的初始VC。
其他两个应该以模态方式显示,以便您可以通过解除它们轻松返回MainVC,无论您是如何打开它们。
要执行此操作,请从MainVC按钮中将segue绘制到PageVC并将其命名为“showPageVC"”。从PageVC中的“下一步”按钮,将另一个segue绘制到SettingsVC。现在您需要一些代码来处理解雇操作:将此代码段放在MainVC中:
@IBAction func unwindToMain(segue:UIStoryboardSegue) {
}
此功能只是一个标记,因此它不需要身体。它只是让你创建一个退回到MainVC的segue:对于SettingsVC中的每个按钮,按住Ctrl键并从按钮绘制到SettingsVC故事板场景标题中的右侧退出图标,然后在小黑色弹出窗口中选择unwindToMain。
现在您只需要实现逻辑来决定是否要在MainVC的viewDidAppear()中显示PageVC。所以整个代码看起来像这样:
class MainVC: UIViewController {
var didDisplayPageVC = false
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if (didDisplayPageVC == false) {
performSegue(withIdentifier: "showPageVC", sender: self)
didDisplayPageVC = true
}
}
@IBAction func unwindToMain(segue:UIStoryboardSegue) {
}
}
其余的都在故事板中。如果这个小概念验证工作正常,你可以去配置segues(你可能想要删除动画)等。