Swift и навигация : Как мне перейти к определенному контроллеру просмотра?

#ios #swift #uiviewcontroller #navigation #storyboard

Вопрос:

Чтобы перейти к корневому ViewController, я могу просто использовать следующий код.

 navigationController?.popToRootViewController(animated: false)
 

Но что, если я захочу всплывать до определенного контроллера вида в стеке навигации, как я могу это сделать? Пожалуйста, помогите мне. Спасибо.

Комментарии:

1. Используйте viewControllers свойство навигационного контроллера, чтобы найти, к какому из них вы хотите перейти, а затем позвоните popToViewController(_:animated:) , чтобы перейти к нему.

2. Не могли бы вы показать мне пример кода?

3. Как вы узнаете, на какой контроллер просмотра вы хотите перейти? Какова логика этого?

4. Скажи, что это сделал я. Один -> Два ->> Три ->>> Четыре ->>>> Пять. И я хочу прыгать с пяти до двух. Как мне это сделать?

5. guard let navigationController = navigationController else { return }; let targetVC = navigationController.viewControllers[1]; navigationController.popToViewController:(targetVC, animated: true) ? Это довольно просто, я не вижу проблемы.

Ответ №1:

Навигационный контроллер содержит группу контроллеров просмотра, и вы можете перейти к любому подконтроллеру, который хотите. Например, ваш поток выглядит так:

HomeViewController -> ContactViewController -> ContactDetailsViewController -> ChatViewController

Затем от ChatViewController вас хотят оттолкнуться к ContactViewController :

 class ChatViewController: UIViewController {
    ....
    func popToContact() {
        if let contactVC = self.navigationController?.viewControllers.filter { $0 is ContactViewController }.first {
            self.navigationController?.popToViewController(contactVC, animated: true)
        }
    }
}