假设有A、B、C、D四个导航控制器,A->B->C,最后push到D,但是D 要pop到B,不经过C控制器,因为有手势滑动返回,也需要滑动的时候直接回到B控制器,不需要经过C控制器,这个时候想到从导航控制器的堆栈数组中直接移除C控制器,这样就解决问题了,结果在iOS7上发现一个bug,D pop到B的时候,B控制器的title显示的是C的,这个不知道是不是苹果的bug呢?最后换了一种代码的写法,解决了此问题,代码如下:
/***移除中间的控制器**/
NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:**C控制器**.navigationController.viewControllers];
[currentViewController.navigationController.viewControllers enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if([obj isKindOfClass:[**C控制器类名** class]]) {
[viewControllers removeObject:obj];
}
}];
[viewControllers addObject:**D控制器**];
[**C控制器**.navigationController setViewControllers:viewControllers animated:YES];
思路: A->B->C->D,然后D->B,在C跳到D的时候,先移除C,然后add D控制器,最后setViewControllers就好了!!!
PS:以上导航控制器跳转思路可以实现导航控制器内部任意跳转问题!!!