注销用户时如何切换UINavigationController的根视图控制器(Swift 5)

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

我正在尝试使它的初始根视图控制器为HomeViewController。然后,我运行一个代码来检查用户(我正在使用Firebase)是否已经登录。如果用户未登录,则根视图控制器将更改为LoginViewController并以模态显示“登录/注册”屏幕,然后在用户登录后释放这些VC。

func authenticateUserConfigureView() {

    if Auth.auth().currentUser == nil {
        DispatchQueue.main.async {
            let navController = UINavigationController(rootViewController: LoginViewController)
            navController.navigationBar.barStyle = .default
            self.present(navController, animated: true, completion: nil)
        }
    } else{
        configureViewComponents()
    }

}

似乎如果我写代码rootViewController: LoginViewController,则会显示此错误

无法将类型'LoginViewController.Type'的值转换为预期的参数类型'UIViewController'

或者,如果我写LoginViewController(),尽管看起来用户被定向到登录视图控制器,但模拟器立即崩溃。

UPDATE

我尝试使用

let homeViewController = self.storyboard?.instantiateViewController(identifier: Constants.Storyboard.homeViewController) as? HomeViewController
        view.window?.rootViewController = homeViewController
        view.window?.makeKeyAndVisible() 

但是似乎什么也没有发生(尽管似乎可以运行)。我正在使用主情节提要板来创建我的视图控制器。

ios swift google-cloud-firestore uinavigationcontroller swift5
1个回答
0
投票

解决起来很简单,您需要传递一个ViewController instance,您可以通过这种方式从Login StoryBoard获取:

    let loginViewController = UIStoryboard (name: "LoginStoryboardName", bundle: Bundle.main).instantiateInitialViewController()
    let navController = UINavigationController(rootViewController: loginViewController )
    UIApplication.shared.keyWindow?.rootViewController = navController 

要进行工作,在登录故事板中,需要将viewController设置为InitialViewController

如果故事板已经具有NavigationController,则可以通过以下方式将ViewController instance传递给rootViewController:

    let viewController = UIStoryboard (name: "LoginStoryboardName", bundle: Bundle.main).instantiateInitialViewController()
    UIApplication.shared.keyWindow?.rootViewController = viewController

希望这会有所帮助。

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