#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)
}
}
}