Swift 3:以编程方式切换ViewControllers
我正在创建一个应用程序,该应用程序显示了应用程序的介绍和指南,其中显示了一个应用程序页面:UIPageViewController。 在浏览前导后,下一步按钮会导致“设置”选项卡“用于存储应用程序的默认设置”设置VC“。 设置必须先由用户选择,尽管稍后可以更改。Swift 3:以编程方式切换ViewControllers
PageVC ---> SettingsVC
一个保存和取消对SettingsVC导致应用程序的MainVC按钮。
上MainVC A键导致SettingsVC。
SettingsVC < ---> MainVC
该应用程序将工作如下:
在PageVC在SettingsVCif saveButtonPressed && cameFromPageVC{
instantiate MainVC
}
if cancelButtonPressed && cameFromPageVC {
do Nothing
}
if saveButtonPressed && cameFromMainVC{
dismiss currentVC
}
if cancelButtonPressed && cameFromMainVC {
dismiss currentVC
}
迈
nextButtonPressedinPageVC{
instantiate SettingsVC
}
if isFirstLaunch{
instantiate PageVC
}else{
instantiate MainVC
}
雷士
if settingsButtonPressedinMainVC {
instantiate SettingsVC
}
我已经确定,如果它是应用程序的首次发射,PageVC将被实例化其他MainVC将被实例化。
我怎样才能viewControllers之间移动没有可能的内存泄漏,即从哪里performSegue和在哪里解雇当前VC?
请包括代码以供参考。
有很多方法可以做到这一点,下面是我发现非常简单的方法,因为您可以完成故事板中的大部分工作: 将您的MainVC视为rootViewController,将其他两个视为配件视图暂时显示。 MainVC应该始终是您的入口点,因此将其设置为Storyboard中的初始VC。
另外两个应该以模态方式显示,这样无论您如何打开它们,您都可以通过忽略它们而轻松返回到MainVC。
要做到这一点,从您的MainVC按钮画一个Segue到PageVC并命名为“showPageVC”。从PageVC的Next按钮中,向SettingsVC绘制另一个Segue。现在,你需要一些代码来处理解雇行动:把这个片段在MainVC:
@IBAction func unwindToMain(segue:UIStoryboardSegue) {
}
这个功能仅仅是一个标志,所以它并不需要一个身体。它只是使您能够创建一个开卷SEGUE回MainVC:对于每一个在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) {
}
}
其余的是故事板。如果这一点证明的概念是工作,你可以去配置塞格斯(你可能想要删除的动画)等
工作就像一个魅力! –
你想用一个故事板或做这一切的代码? –
我已经创建了故事板。任何解释都会有帮助。 –