Контроллер навигации как выскочить весь стек, включая root - PullRequest
0 голосов
/ 05 июля 2018

Я изучаю шаблон координатора. У меня есть пара входов в контроллеры представления. После того, как пользователь завершил вход в систему, я хочу открыть весь стек навигации и установить в качестве основного контроллера мой контроллер. Это выполнимо?

Обходной путь, который я имею, состоит в том, чтобы установить пустой контроллер представления в качестве корневого, поэтому я могу сделать popToRootViewController и затем добавить основной vc как дочерний. Но это не выглядит чистым.

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Изменить свойство viewControllers

 let vc = ///
 self.navigationController?.viewControllers = [vc]   
0 голосов
/ 05 июля 2018

Если вы хотите полностью удалить и заменить весь стек, просто запустите поток снова.

Установите новый контроллер навигации и AppCoordinator и назначьте контроллер навигации для window.rootViewController. Вызовите start в AppCoordinator точно так же, как при запуске, и у вас будет новый стек.

Вы можете добавить метод в свой AppCoordinator, чтобы обработать это для вас

class AppCoordinator: Coordinator, NSObject {

    var navigationController: UINavigationController

    init(navigationController: UINavigationController) {
        self.navigationController = navigationController
    }

    func start() {
       let vc = MainViewController()
       navigationController.setViewControllers([vc], animated: true)
    }

    func resetNavigationStack() {

        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
            return
        }

        navigationController = UINavigationController()
        appDelegate.window = navigationController
        start()
    }

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