if you kown what the viewcontroller you want to back.
UIViewController *targetVC = XXViewController.class ;
NSArray <UIViewController *>*vcs = self.navigationController.viewControllers ;
[vcs enumerateObjectsUsingBlock:^(UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isKindOfClass:targetVC.class]) {
[self.navigationController popToViewController:obj animated:YES];
*stop = YES ;
}
}];
if you kown what the index you want to back.
NSInteger index = 1 ;
[self.navigationController popToViewController:vcs[index] animated:YES];
follow is unimportant
current you have AA,BB two viewcontroller in you navigation . you goto the DD viewcotrlooer and want't show the last viewcontroller when back. when you pop the DD viewcotrller you can use the follow code. The most important thing is to support sideslip.
[self skipCurrentViewcontrollerToViewcontroller:DD.new];
- (void)skipCurrentViewcontrollerToViewcontroller:(UIViewController *)toVC
{
if (self.navigationController == nil) {
NSAssert(NO, @"the navigation is empty!");
return ;
}
NSArray *vcArray = self.navigationController.viewControllers ;
if (vcArray.count > 0) {
NSMutableArray *desArray = [NSMutableArray arrayWithCapacity:4];
for (int i = 0 ;i < vcArray.count - 1 ; i++) {
[desArray addObject:vcArray[i]];
}
[desArray addObject:toVC];
[self.navigationController setViewControllers:desArray animated:YES];
}
else{
[self.navigationController pushViewController:toVC animated:YES];
}
}