Настройка UIViewController за пределами сцены (_: willConnectTo: options :), а затем установка его в окно rootViewController не работает - PullRequest
0 голосов
/ 09 июля 2020

Мое намерение состоит в том, чтобы инициализировать контроллер представления и установить его для окна 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()
}

Что кажется неправильным, когда я передаю контроллер представления в качестве зависимости? Кстати, я не предпочитаю передавать окно в качестве зависимости вызываемому координатору, хотя это работает, я не предпочитаю это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...