Если подкласс навигационного контроллера, вы можете реализовать popViewControllerAnimated: метод и бросить isKindOfClass: проверить там, чтобы определить, является ли контроллер представления вы ищете, выталкивается. Например:
- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
//Reference current controller being displayed
UIViewController *currentController = [self.viewControllers lastObject];
//Check class
if ([currentController isKindOfClass:[MyDesiredController class]]) {
NSLog(@"Popping Desired Controller, Do Stuff Here");
}
return [super popViewControllerAnimated:animated];
}
Однако это не отменяет фактического сование контроллера представления (возвращение ноль остановит контроллер от выскакивают, но по-прежнему будет вызывать панель навигации, чтобы совать это информация, и возвращение NO в shouldPop: делегат метод навигационной панели по-прежнему будет вызывать контроллер независимо. Я слышал, что это происходит только при использовании контроллера навигации, но я этого не тестировал).
Для вашей ситуации, однако, поскольку вы хотите снова открыть два контроллера вида, вы можете удалить второй последний контроллер вида из свойства диспетчера видимости контроллера навигации, преобразовывая контроллеры view в nsmutablearray, удаляя контроллер, а затем преобразовывая это nsmutablearray возвращается к массиву и устанавливает его как свойство управления просмотром контроллера навигации. Я не тестировал это, но я думал, что разделю эту идею.