ios - 注销用户时如何切换 UINavigationController 的根视图控制器(Swift 5)
问题描述
我正在努力使我的初始根视图控制器是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()
,尽管用户似乎被定向到登录视图控制器,但模拟器会立即崩溃。
更新
我尝试使用
let homeViewController = self.storyboard?.instantiateViewController(identifier: Constants.Storyboard.homeViewController) as? HomeViewController
view.window?.rootViewController = homeViewController
view.window?.makeKeyAndVisible()
但似乎什么都没有发生(尽管它似乎在运行)。顺便说一句,我正在使用主故事板来创建我的视图控制器。
解决方案
解决起来很简单,你需要传递一个 ViewController实例,你可以从你的 Login StoryBoard 中获取,这样:
let loginViewController = UIStoryboard (name: "LoginStoryboardName", bundle: Bundle.main).instantiateInitialViewController()
let navController = UINavigationController(rootViewController: loginViewController )
UIApplication.shared.keyWindow?.rootViewController = navController
要工作,在Login storyboard中,您的 viewController 需要设置为InitialViewController。
如果你的 Storyboard 已经有一个 NavigationController,你可以将 ViewController实例传递给 rootViewController,这样:
let viewController = UIStoryboard (name: "LoginStoryboardName", bundle: Bundle.main).instantiateInitialViewController()
UIApplication.shared.keyWindow?.rootViewController = viewController
希望这可以帮助。
推荐阅读
- android - 错误:Android Gradle 插件仅支持 Butterknife Gradle 插件版本 9.0.0-rc2 及更高版本
- php - 无法将数据库中的字段加载到组合框
- javascript - 有没有办法创建一条从时间轴上的标记到文本的线?
- python-3.x - 分别设置两个直方图的颜色时遇到问题
- python - 使用变量代替控制和值pywinauto
- arduino - 如何让数字输出引脚正常工作
- python - 在python中转换列表
- php - PHP:在另一个内部添加回显内容
- mysql - MySql 错误 1415 不允许从函数返回结果集
- android-studio - Aapt2Exception:Android资源编译失败错误:资源'attr/actionBarSize'与配置''的重复值