在UITabBarController之前呈现Login View Controller

问题描述 投票:0回答:2

我想提供一个登录视图控制器,以便我的用户可以在显示标签栏控制器之前进行身份验证。在下面显示的代码中,我收到错误“无法将类型'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
    }
}
ios swift login appdelegate
2个回答
0
投票

你有错误,因为试图强行解开LogInViewControllerUITabBarController

对于你的设计流程存储用户数据库中的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
        }

0
投票

作为替代方法,如何始终将rootViewController设置为选项卡式栏控制器。然后,如果用户已注销,则从选项卡式栏控制器以模态方式显示登录视图控制器。用户成功登录后,关闭登录视图控制器。我在很多应用程序上多次使用过这种方法。

© www.soinside.com 2019 - 2024. All rights reserved.