, если вы знаете, какой контроллер просмотра вы хотите вернуть.
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 ;
}
}];
если вы знаете, какой индекс хотите вернуть.
NSInteger index = 1 ;
[self.navigationController popToViewController:vcs[index] animated:YES];
следовать неважно
текущий у вас AA, BB два viewcontroller в вашей навигации. Вы идете в DD viewcotrlooer и не хотите показывать последний view-контроллер, когда вернетесь. когда вы открываете DD viewcotrller, вы можете использовать следующий код. Самое главное - поддерживать скольжение.
[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];
}
}