gpt4 book ai didi

ios - 根据用户身份验证状态在启动时设置 Root View Controller

转载 作者:行者123 更新时间:2023-11-28 13:24:52 25 4
gpt4 key购买 nike

这是我现在的 Storyboard布局

enter image description here

所以我需要的是在应用程序启动时检查用户是否已经通过身份验证。如果他没有登录,请使用登录和注册表单将 Root View Controller 设置为导航 Controller 。如果他已登录,请将其设置为标签栏 View Controller 。

我尝试了很多不同的解决方案,但都没有奏效。它只是将 View Controller 设置为标有“是初始 View Controller ”的那个。

这是我在 AppDelegate 中尝试的代码:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

FirebaseApp.configure()

self.window = UIWindow(frame: UIScreen.main.bounds)

let storyboard = UIStoryboard.init(name: "Main", bundle: nil)

var viewController: UIViewController

if isAuthenticated() {
viewController = storyboard.instantiateViewController(withIdentifier: Constants.Storyboards.homeViewController) as! UITabBarController
} else {
viewController = storyboard.instantiateViewController(withIdentifier: Constants.Storyboards.authViewController) as! UINavigationController
}

self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()

return true
}

我可以通过轻松地按下一个按钮来做到这一点,但我希望它在用户不需要做任何事情的情况下发生。

编辑:感谢@LukaCefarin 和@Francesco Deliro,我设法找出问题所在。我使用的是 XCode 11,必须在 SceneDelegate.swift 中设置 rootViewController

对于任何有类似问题的人来说,这就是我在 SceneDelegate.swift 中的代码:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

guard let _ = (scene as? UIWindowScene) else { return }

self.window = UIWindow(windowScene: scene as! UIWindowScene)

let storyboard = UIStoryboard.init(name: "Main", bundle: nil)

var viewController: UIViewController;

if isAuthenticated() {
viewController = storyboard.instantiateViewController(withIdentifier: "HomeVC")
} else {
viewController = storyboard.instantiateViewController(withIdentifier: "AuthVC")
}

self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()

}

最佳答案

编辑:

此解决方案和在 AppDelegate 中设置窗口 rootViewController 适用于 Xcode11 和 iOS13 之前的版本。正如 Luka Cefarin 在评论中所建议的那样,如果您使用的是 Xcode11 和 iOS13,则必须在 SceneDelegate.swift 文件中设置窗口 rootViewController。

您必须删除主界面并取消选中 Storyboard中的初始 View Controller :

之前

enter image description here

之后

enter image description here

关于ios - 根据用户身份验证状态在启动时设置 Root View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58571337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com