Реализация метода делегирования контроллера навигации:
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
Он сработает для всех VC в стеке контроллеров навигации. (поместите этот код в VC сразу после вашего контроллера навигации и вставьте <<code>UINavigationControllerDelegate> в .h
)
Что вы хотите сделать, это заменить весь стек контроллера навигации без контроллера представления, который вы хотите удалить в нем. Так как это неизменяемый массив, вы должны преобразовать его в изменяемый массив перед удалением VC, удалить VC, а затем заменить стек контроллера навигации вызовом [self.navigationController setViewControllers:newVCs animated:NO];
. Это важная часть. Вы заменяете стек после того, как загрузили страницу, на которой находитесь, но, поскольку вы сохраняете виртуальный канал, на котором вы находитесь, он по-прежнему является верхним элементом в стеке, поэтому не оказывает видимого влияния на пользователя. Пока у вас не много VC в стеке, это не дорогой звонок.
Вот как я это сделал в методе делегата:
//Remove list setup page if new list was created
if ([self.navigationController topViewController].class == [ItemViewController class])
{
NSArray *VCs = [self.navigationController viewControllers];
if(((UITableViewController*)[VCs objectAtIndex:[VCs count]-2]).class == [NewCardTypeController class])
{
NewCardTypeController *removedObject = [VCs objectAtIndex:[VCs count]-2];
if(removedObject != nil)
{
NSMutableArray *newArray = [NSMutableArray arrayWithArray:VCs];
[newArray removeObject:removedObject];
NSArray *newVCs = [NSArray arrayWithArray:newArray];
[self.navigationController setViewControllers:newVCs animated:NO];
}
}
}