Не совсем понятно, как настроены ваши взгляды относительно друг друга, исходя из того, что вы сказали до сих пор.
Я предполагаю, что у вас есть контроллер навигации и 3 контроллера представления, которые отображаются в стеке навигации.
Если это так, и вы хотите вернуться к двум экранам одновременно (от # 3 до # 1, пропуская # 2), то вам нужен указатель на представление controller для # 1 (не само представление). Похоже, что первый вызов метода popViewController:
в вашем вопросе отправляется в виде.
Пример кода для вывода на первый контроллер представления:
UINavigationController* navController = self.navigationController;
UIViewController* controller = [navController.viewControllers objectAtIndex:0];
[navController popToViewController:controller animated:YES];
Если вы попробовали это, и это не сработало, возможно, что-то пошло не так:
- Может быть
self.navigationController
на самом деле не тот объект.
- Возможно, ожидаемое вами представление на самом деле не является видом # 0 в стеке навигации.
- Возможно, контроллер навигации, с которым вы работаете, в данный момент не виден.
Вот некоторые дальнейшие шаги, которые вы можете предпринять, чтобы проверить эти гипотезы:
- При первом выделении контроллера навигации, с которым вы хотите работать, позвоните
NSLog(@"Nav controller is at %p", navController);
, и в этом коде добавьте вызов к NSLog(@"Now my navController is at %p", navController);
и убедитесь, что адреса совпадают.
Если правильный навигационный контроллер, распечатайте текущий стек навигации; что-то вроде этого (предполагается, что каждый контроллер представления имеет свое имя класса):
for (UIViewController* viewController in navController.viewControllers) {
NSLog(@"%s", class_getName([viewController class]));
}
Сделайте что-нибудь визуальное с навигационным контроллером, которое вы считаете видимым, чтобы убедиться, что оно действительно есть. Например, [navController.visibleViewController.view addSubview:aColorFulView];
, где aColorFulView
является визуально очевидным UIView
.