这里有新的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
}
Run Code Online (Sandbox Code Playgroud)
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)
}
Run Code Online (Sandbox Code Playgroud)
如果我选择第二个选项,我可以在登录用户后轻松转换到应用程序的主流程(比如说标签栏控制器).在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)
Run Code Online (Sandbox Code Playgroud)
满容易.
至于第一种方法,我不确定如何在用户登录后转换到应用程序的主要内容.
我在这里寻找的是处理登录流程的"最佳"方式.我列出了两种方法,但也许还有另一种方法更好.另外,如果我列出的第一个"最佳"方法,在完成用户登录后如何进入我的标签栏控制器?谢谢!
这些都是很好的选择.我做过的一件事做得很好的是实现了一个自定义容器视图控制器作为我的应用程序的根(这可能是我的主视图控制器的子类,如标签栏控制器或导航控制器).
在这个容器视图控制器中,我可以根据用户的登录状态放置代码来显示和关闭登录视图控制器.注意:您还可以在此处使用临时全屏视图来隐藏应用程序的主要内容,同时显示/关闭登录屏幕 - 这是获得非常流畅的应用程序启动过渡的简单方法.
我特别喜欢这种方法,因为应用程序的其余部分不需要担心细节.您的容器可以像普通的标签栏控制器或导航控制器一样工作,但在下面,您可以将所有登录UI逻辑封装在一个位置.
| 归档时间: |
|
| 查看次数: |
4496 次 |
| 最近记录: |