我正在尝试使它的初始根视图控制器为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()
但是似乎什么也没有发生(尽管似乎可以运行)。我正在使用主情节提要板来创建我的视图控制器。
解决起来很简单,您需要传递一个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
希望这会有所帮助。