0

我的意图是初始化视图控制器并将其设置为窗口 rootViewController,然后将视图控制器作为依赖项传递给 AppCoordinator,应用程序决定如何处理视图控制器(将其替换为入职场景或登录页面,甚至如果用户已经登录,则主屏幕。

问题是每当我这样做时,窗口似乎并没有恢复它的视图控制器,而是一个黑屏。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    self.window = UIWindow(windowScene: windowScene)
    var viewController = UIViewController()
    self.window?.rootViewController = viewController
    let appCoordinator = AppCoordinator(viewController: viewController)
    appCoordinator.start()
    window?.makeKeyAndVisible()
}

AppCoordinator.swift

import UIKit
import SwiftUI
class AppCoordinator: Coordinator {
    var viewController: UIViewController
    init(viewController: UIViewController) {
        self.viewController = viewController
    }
    func start() {
        let onboardingView = OnboardingView()
        self.viewController = UIHostingController(rootView: onboardingView)
    }
}

如果我绕过 AppCoordinator 并在场景委托中设置所有内容,则屏幕会正确加载:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    self.window = UIWindow(windowScene: windowScene)
    var viewController = UIViewController()
    let onboardingView = OnboardingView()
    self.window?.rootViewController = UIHostingController(rootView: onboardingView)
    window?.makeKeyAndVisible()
}

当我将视图控制器作为依赖项传递时,似乎有什么问题?顺便说一句,我不喜欢将窗口作为依赖项传递给被调用的协调器,尽管这可行,但我不喜欢它。

4

0 回答 0