Если вы создаете подкласс для своего контроллера навигации, вы можете реализовать метод 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];
}
Однако это не отменяет фактическое выталкивание контроллера представления (возврат nil остановит всплывающее окно контроллера, но все равно заставит навигационную панель выскочить его информацию, и возврат NO к методу shouldPop: делегат панели навигации будет все равно высовывает контроллер независимо. Я слышал, что это происходит только при использовании контроллера навигации, но я не проверял это).
Однако в вашей ситуации, поскольку вы хотите вернуть два контроллера представления назад, вы можете удалить второй последний контроллер представления из свойства viewcontrollers контроллера навигации, преобразовав viewcontrollers в nsmutablearray, удалив контроллер, а затем преобразовав этот nsmutablearray. вернуться к массиву и установить его в качестве свойства viewcontrollers контроллера навигации. Я не проверял это, но думал, что поделюсь этой идеей.