我是一名新的iOS开发者。我正在开发一个项目,要求用户在第一次打开应用程序时登录。从那时起,我希望应用程序直接打开主流程(在我的情况下是一个选项卡控制器)。经过一些研究,我发现实现这个功能有两种主要方法:
1)在应用程序代理中有条件地设置应用程序窗口的根视图控制器。例如:
if userLoggedIn {
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let tabBarController: UITabBarController = storyboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController
self.window?.makeKeyAndVisible()
self.window?.rootViewController = tabBarController
} else {
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let logInViewController: LogInViewController = storyboard.instantiateViewControllerWithIdentifier("LogInViewController") as! LogInViewController
self.window?.makeKeyAndVisible()
self.window?.rootViewController = logInViewController
}
2) 将导航控制器用作应用程序的根视图控制器,并在应用程序委托中有条件地设置由导航控制器管理的视图控制器。例如:
if userLoggedIn {
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let tabBarController: UITabBarController = storyboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController
let navigationController = self.window?.rootViewController as! UINavigationController
navigationController.navigationBarHidden = true
navigationController.setViewControllers([tabBarController], animated: true)
} else {
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let tabBarController: ViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController") as! ViewController
let navigationController = self.window?.rootViewController as! UINavigationController
navigationController.navigationBarHidden = true
navigationController.setViewControllers([tabBarController], animated: true)
}
如果我选择第二个选项,在用户登录完成后,我可以轻松地切换到应用程序的主要流程(比如说一个选项卡控制器)。在LogInViewController中的适当位置,我可以这样说:
// Transition to tab bar controller
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let tabBarController: UITabBarController = storyboard.instantiateViewControllerWithIdentifier("TabBarController") as! UITabBarController
self.navigationController?.setViewControllers([tabBarController], animated: true)
非常简单。
关于第一种方法,我不确定在登录用户后如何过渡到应用程序的主要内容。
这里我正在寻找处理登录流程的“最佳”方式。我列出了两种方法,但也许有其他更好的方法。此外,如果“最佳”方法是我列出的第一种方法,那么在完成用户登录后,我如何进入选项卡栏控制器?谢谢!
UITabBarController
的子类并把所有逻辑放在里面。如果需要进一步帮助,请告诉我! - EricviewWillAppear
方法中,检查用户是否已登录。如果没有,则用某种品牌覆盖主要内容。如果是,则让用户进入应用程序。然后,在viewDidAppear
中,如果用户未登录,则以模态方式呈现登录导航控制器。当登录序列完成并且登录导航控制器被解除时,主导航控制器的viewWillAppear
和viewDidAppear
方法将再次被调用,并且它们将让用户进入应用程序或重新显示登录流程。 - Eric