Ваш код создает новый экземпляр представления, который никогда не помещался в стек, а затем пытается вернуться к этому контроллеру.
Если вы возвращаетесь к контроллеру корневого представления, вы можете использовать popToRootViewControllerAnimated:
Если вы возвращаетесь на известное расстояние, вы можете звонить popViewControllerAnimated:
более одного раза. В вашем примере это было бы 2 контроллера, так что для вызовов. Вы можете сделать то же самое, посмотрев в viewControllers
на контроллер 2 с конца и подключившись к нему.
Приведенные выше предложения являются быстрыми исправлениями. Один из оптимальных сценариев - передача контроллера, к которому вы хотите вернуться, каждому последующему нажатому контроллеру. Первый передает себя второму, второй передает эту ссылку третьему, третий всплывает переданной ссылке, которая является первой.
Фактически вы создаете временный корневой контроллер. Вы можете создать подкласс UINavigationController
и добавить свойство temporaryRoot
и метод popToTemporaryRootViewControllerAnimated:
, которые будут открывать ваш временный корень и очищать его. Когда первый выводит секунды, он также устанавливает себя в качестве временного корня, так что каждый контроллер в стеке не должен передавать ссылку. Вам нужно было бы добавить несколько дополнительных проверок, чтобы не допустить, чтобы вы никогда не пробежали мимо временного корня, не очистив его.