在UITabBarController之前呈现Login View Controller
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在UITabBarController之前呈现Login View Controller相关的知识,希望对你有一定的参考价值。
我想提供一个登录视图控制器,以便我的用户可以在显示标签栏控制器之前进行身份验证。在下面显示的代码中,我收到错误“无法将类型'LogInViewController'的值转换为'UITabBarController'。Apple文档列出:
部署选项卡栏界面时,必须将此视图安装为窗口的根目录。与其他视图控制器不同,标签栏界面永远不应该作为另一个视图控制器的子项安装。
当我在5个视图控制器上传播核心数据时(例如,在控制器栏控制器中作为AppDelegate类中的属性声明的controller1.coreDataStack = coreDataStack),我感到困惑并且我的实现很复杂。我可以获得一些帮助,了解如何将用户从登录屏幕转换到其中一个选项卡式视图控制器?任何输入将不胜感激。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Login View Controller
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loginVC = storyboard.instantiateViewController(withIdentifier: "loginVC") as! LogInViewController
self.window?.rootViewController = loginVC
// TabBar Controller
let tabController = window!.rootViewController as! UITabBarController
if let tabViewControllers = tabController.viewControllers {
// First tab (only one so far...)
let navController = tabViewControllers[0] as! UINavigationController
let controller1 = navController.viewControllers.first as! FirstViewController
controller1.coreDataStack = coreDataStack
}
}
你有错误,因为试图强行解开LogInViewController
到UITabBarController
。
对于你的设计流程存储用户数据库中的loginStatus在设置window.rootViewController
之前检查条件,如果用户是logged-in
然后显示tabController
,否则显示LogInViewController
。
let userLogined = GET LOGIN STATUS FROM DATABSE
if userLogined{
// Initiate Tabbar Controller object
let tabController = INITIATE_TABBAR_CONTROLLER
let tabViewControllers = tabController.viewControllers
// First tab (only one so far...)
let navController = tabViewControllers[0] as! UINavigationController
let controller1 = navController.viewControllers.first as! FirstViewController
controller1.coreDataStack = coreDataStack
self.window?.rootViewController = tabController
}else{
// Login View Controller
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let loginVC = storyboard.instantiateViewController(withIdentifier: "loginVC") as! LogInViewController
self.window?.rootViewController = loginVC
}
作为替代方法,如何始终将rootViewController设置为选项卡式栏控制器。然后,如果用户已注销,则从选项卡式栏控制器以模态方式显示登录视图控制器。用户成功登录后,关闭登录视图控制器。我在很多应用程序上多次使用过这种方法。
以上是关于在UITabBarController之前呈现Login View Controller的主要内容,如果未能解决你的问题,请参考以下文章
在UITabBarController之前呈现Login View Controller
在 UITabBarController 中呈现一个新的 UIViewControler
在呈现的 ViewController/NavigationController 上获取 UITabBarController
在演示过程中尝试在 UITabBarController 上呈现 UIImagePickerController
如何呈现嵌入在 UITabBarController 和 UINavigationBarController 中的 ViewController