我的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 ,但这有什么样的内存管理问题吗?
答案 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
}