Swift 3:以编程方式切换ViewControllers

时间:2016-12-30 14:34:30

标签: ios swift3 segue viewcontroller

我正在创建一个应用程序,它显示 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的位置?

请提供参考代码。

1 个答案:

答案 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(你可能想要删除动画)等。