gpt4 book ai didi

操作系统 |无法更改应用程序委托(delegate)中的 Root View Controller

转载 作者:行者123 更新时间:2023-12-02 00:03:48 26 4
gpt4 key购买 nike

我正在构建一个应用程序,如果用户已登录,则必须更改其 Root View Controller 。如果用户已登录,我必须将选项卡栏 Controller 显示为主屏幕,如果用户未登录,我必须显示身份验证 Controller 。我的两个 Controller 都是 Storyboard Controller 。现在在我的应用程序委托(delegate)中,我放入了以下代码

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

if UserDefaults.standard.bool(forKey: Constants.UserDefaultsKeys.isLoggedIn){
initialViewController = storyboard.instantiateViewController(identifier: Constants.StoryBoards.homeViewController) as! TabController
}else{
initialViewController = storyboard.instantiateViewController(identifier: Constants.StoryBoards.authenticationController)
}
window?.rootViewController = initialViewController
window?.makeKeyAndVisible()

根据代码,如果用户已登录,则必须显示TabController。但未显示。我已尝试调试和 TabControllerviewDidLoad 正在被调用,但我的 authenticationController 仍在显示,这可能是因为 authenticationController 被设置为 Storyboard 中的初始 View Controller 。谁能帮我解决这个问题

最佳答案

如果您只针对 iOS 13+,您唯一需要做的更改是添加一行:

    window?.rootViewController = initialViewController

// add this line
self.window = window

window?.makeKeyAndVisible()

如果你想支持早期的 iO​​S 版本,这里有一个完整的 SceneDelegate/AppDelegate 实现:

SceneDelegate.swift

//
// SceneDelegate.swift
// Created by Don Mag on 3/27/20.
//

import UIKit

// entire class is iOS 13+
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

var window: UIWindow?

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

print("Scene Delegate willConnectTo", UserDefaults.standard.bool(forKey: "isLoggedIn"))

guard let windowScene = (scene as? UIWindowScene) else { return }
let window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window.windowScene = windowScene

if UserDefaults.standard.bool(forKey: "isLoggedIn") {
guard let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "HomeVC") as? TabController else {
fatalError("Could not instantiate HomeVC!")
}
window.rootViewController = vc
} else {
guard let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "AuthVC") as? AuthViewController else {
fatalError("Could not instantiate HomeVC!")
}
window.rootViewController = vc
}

self.window = window

window.makeKeyAndVisible()
}

}

AppDelegate.swift

//
// AppDelegate.swift
// Created by Don Mag on 3/27/20.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window : UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool {
if #available(iOS 13, *) {
// do only pure app launch stuff, not interface stuff
} else {

print("App Delegate didFinishLaunching... isLoggedIn:", UserDefaults.standard.bool(forKey: "isLoggedIn"))

self.window = UIWindow()

if UserDefaults.standard.bool(forKey: "isLoggedIn") {
guard let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "HomeVC") as? TabController else {
fatalError("Could not instantiate HomeVC!")
}
window?.rootViewController = vc
} else {
guard let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "AuthVC") as? AuthViewController else {
fatalError("Could not instantiate HomeVC!")
}
window?.rootViewController = vc
}

window?.makeKeyAndVisible()

}
return true
}

// MARK: UISceneSession Lifecycle

// iOS 13+ only
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
// iOS 13+ only
@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
}

}

关于操作系统 |无法更改应用程序委托(delegate)中的 Root View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61291306/

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