管理View Controllers导航的最佳方式

时间:2016-11-23 14:35:14

标签: ios iphone swift

我的App中有以下结构:

当应用程序首次启动时,它会加载我的初始视图控制器( VC A )。 然后,它会在用户登录时执行。如果不是,则会显示另一个视图控制器( VC B )。

VC B ,用户登录,如果已经注册用户,则只需返回 VC A (我呼叫{{1来自 VC B )。如果用户第一次登录,那么 VC B 会调用一系列其他视图控制器,负责某种教程(比如我们的序列 VC T1 < / strong>, VC T2 VC T3 )一个呼叫另一个。

VC T3 完成它应该做的事情时,它必须返回 VC A

我的问题是如何做到这一点的最佳方法。 目前我正在考虑直接从 VC T3 创建一个segue回到初始控制器 VC A ,但这有什么样的内存管理问题吗?

3 个答案:

答案 0 :(得分:2)

我认为最好的方法是使用UINavigationController,其中包含方法popToViewController(viewController: UIViewController, animated: Bool)popToRootViewController(animated: Bool)

您需要传递给这些方法的视图控制器,您可以像这样从故事板中实例化

var yourVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "youVCIdentifier")

编辑:很抱歉,忘记提及在这种情况下你当然应该将UINavigationController添加到你的故事板:

Editor -> Embed in -> Navigation Controller

答案 1 :(得分:1)

最好在AppDelegate中进行此操作

if userLogined {
  self.window?.rootViewController = loginedController
} else {
  self.window?.rootViewController = notLoginedController
}

答案 2 :(得分:0)

如果要从任何地方设置rootViewController,请使用它:

OperationQueue.main.addOperation {
        let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "TabBarController") as! UITabBarController
        UIApplication.shared.keyWindow?.rootViewController = tabBarController
    }