Как создать экземпляр root UINavigationController в Swift? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть приложение Firebase, написанное программно с root контроллером представления, встроенным в UINavigationController.

SceneDelegate.swift

guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(windowScene: windowScene)
window?.makeKeyAndVisible()
window?.rootViewController = UINavigationController(rootViewController: HomeController())

В приложении Первое, что происходит в HomeController, - это проверка, вошел ли пользователь в систему, если нет, он представляет отдельный ViewController с именем LoginController, который также встроен в UINavigationController, чтобы перемещаться между регистром и Login View Controller.

HomeController.swift (это то, что выполняется, если Firebase сообщает, что пользователь не вошел в систему)

let nav = UINavigationController(rootViewController: LoginController())
nav.isModalInPresentation = true
nav.modalPresentationStyle = .fullScreen
self.present(nav, animated: true, completion: nil)

Однако метод в LoginController, который выполняет вход пользователя и настраивает HomeController, не работает должным образом. Вот как я обычно создаю экземпляр rootViewController, когда он не встроен в UINavigationController:

guard let controller = UIApplication.shared.windows.filter({$0.isKeyWindow}).first?.rootViewController as? HomeController else { return }

Он отображается как nil, когда он встроен в UINavigationController.

Мой вопрос: как создать экземпляр HomeController для вызова его функций для настройки пользовательского интерфейса и т. д. c. после отклонения LoginController?

Просто напишите let homeController = HomeController(), затем вызов homeController.configureUI() не работает.

EDIT:

I смог получить доступ к методу из HomeController следующим образом:

let controller = self.navigationController?.viewControllers[0] as? HomeController
controller?.configure()

Но я не думаю, что это хорошее решение.

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