2016-12-30 116 views
0

我正在创建一个应用程序,该应用程序显示了应用程序的介绍和指南,其中显示了一个应用程序页面:UIPageViewController。 在浏览前导后,下一步按钮会导致“设置”选项卡“用于存储应用程序的默认设置”设置VC“。 设置必须先由用户选择,尽管稍后可以更改。Swift 3:以编程方式切换ViewControllers

PageVC ---> SettingsVC

一个保存取消对SettingsVC导致应用程序的MainVC按钮。

MainVC A键导致SettingsVC

SettingsVC < ---> MainVC

该应用程序将工作如下:

在PageVC在SettingsVC

if 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?

请包括代码以供参考。

+0

你想用一个故事板或做这一切的代码? –

+0

我已经创建了故事板。任何解释都会有帮助。 –

回答

1

有很多方法可以做到这一点,下面是我发现非常简单的方法,因为您可以完成故事板中的大部分工作: 将您的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) { 
    } 

} 

其余的是故事板。如果这一点证明的概念是工作,你可以去配置塞格斯(你可能想要删除的动画)等

+0

工作就像一个魅力! –

相关问题