Ответ 1
Получите ссылку на свой UINavigationController и вызовите
- (UIViewController *)popViewControllerAnimated:(BOOL)animated
на нем.
У меня есть контроллер навигации с контроллером просмотра, отображающим кнопку. Кнопка привязана к другому контроллеру просмотра с помощью кнопки push segue, которая автоматически добавляет верхнюю панель навигации с помощью кнопки "Назад" . Все это прекрасно работает. Нажатие кнопки "Назад" сдвигает 2-й вид и возвращается к 1-му.
У меня есть кнопка на втором контроллере просмотра, которая при нажатии запускает некоторый код и вызов делегата обратно в 1-й контроллер просмотра. Опять это прекрасно работает.
Теперь мне просто нужно снять 2-й нажатый вид с кода, как если бы была нажата кнопка "Назад" . Я пробовал использовать rejectModalViewCcontrollerAnimated и rejectViewControllerAnimated, однако оба они отклоняют весь контроллер навигации, который удаляет вид 2 и 1 (возврат бака в основное меню).
Каков правильный способ сместить вид.
Получите ссылку на свой UINavigationController и вызовите
- (UIViewController *)popViewControllerAnimated:(BOOL)animated
на нем.
В Swift он будет вызывать метод
self.navigationController?.popViewControllerAnimated(true)
В быстром режиме вы также можете позвонить:
self.navigationController?.popToRootViewControllerAnimated(true)
Если мы используем push segue, тогда используйте popViewController
@IBAction func backButtonClicked(_ sender: Any) {
self.navigationController?.popViewController(animated: false)
}
В Objective-C есть
[self.navigationController popViewControllerAnimated:YES];
для перехода к первому контроллеру root
[self.navigationController popToRootViewControllerAnimated:YES];
или это возможный переход к конкретному контроллеру
[self.navigationController popToViewController:(nonnull UIViewController *) animated:(BOOL)];
анимационный процесс анимации перемещения контроллера. Если анимация false
, контроллер появится без анимации.
UIViewController
должен быть от одного, находящегося в стеке.