Ответ 1
Здесь вы найдете способ возврата двух контроллеров представлений, которые имеют аналогичную проблему с вашим текущим контроллером представления и его свойство navigationController, уходящим, как только вы делаете первый поп:
// pop back 2 controllers on the stack to the setup screen
//
// locally store the navigation controller since
// self.navigationController will be nil once we are popped
//
UINavigationController *navController = self.navigationController;
// retain ourselves so that the controller will still exist once it popped off
//
[[self retain] autorelease];
// Pop back 2 controllers to the setup screen
//
[navController popViewControllerAnimated:NO];
[navController popViewControllerAnimated:YES];
альтернативно, вы можете непосредственно "вечеринку" в стеке контроллеров контроллеров навигации:
setViewControllers: анимированный: заменяет управляемые контроллеры представлений с помощью навигационного контроллера с указанных элементов.
- (void) setViewControllers: (NSArray *) viewControllers animated: (BOOL) анимированные параметры viewControllers Контроллеры просмотра для размещения в стеке. порядок следования контроллеров в этом массиве представлен новый нижний порядок контроллеров в стеке навигации. Таким образом последний элемент, добавленный в массив, становится верхний элемент навигационного стека. анимированный Если ДА, оживите нажатие или щелчка контроллера верхнего уровня. Если НЕТ, замените контроллеры просмотра без каких-либо анимаций. Обсуждение Вы может использовать этот метод для обновления или заменить текущий контроллер стек без нажатия или контроллер явно. К тому же, этот метод позволяет вам обновить набор контроллеров без анимации изменения, которые могут быть время запуска, когда вы хотите вернуться контроллер навигации к предыдущее состояние.
Если анимация включена, этот метод решает, какой тип перехода на выполнить в зависимости от того, последний элемент в массиве элементов уже находится в навигационный стек. Если вид контроллер находится в стеке, но не самый верхний элемент, это метод использует поп-переход; если это самый верхний элемент, переход отсутствует выполнено. Если контроллер вида а не в стеке, этот метод использует нажмите переход. Только один переход выполняется, но когда этот переход заканчивается, все содержимое стек заменены новым представлением контроллеры. Например, если контроллеры A, B и C находятся на стек и вы устанавливаете контроллеры D, A, и B, этот метод использует pop переход и полученный стек содержит контроллеры D, A и B.
Доступность Доступна в iOS 3.0 и позже. Объявлено в UINavigationController.h
Итак, чтобы "исчезнуть" контроллера просмотра прямо под вами в стеке навигации, в вашем представлении контроллера viewDidLoad вы можете сделать это:
NSMutableArray *VCs = [self.navigationController.viewControllers mutableCopy];
[VCs removeObjectAtIndex:[VCs count] - 2];
self.navigationController.viewControllers = VCs;