项目中,遇到一个需求,就是返回至指定页,实现思路是直接将当前控制器与目标控制器之间的控制器出栈,代码如下
//在需要侧滑到指定控制器的控制器的 view 加载完毕后偷偷将当前控制器与目标控制器之间的所有控制器出栈
# 1. 获取当行控制器所有子控制器
NSMutableArray <UIViewController *>* tmp = self.navigationController.viewControllers.mutableCopy;
# 2. 获取目标控制器索引
UIViewController * targetVC = nil;
for (NSInteger i = 0 ; i < tmp.count; i++) {
UIViewController * vc = tmp[i];
if ([vc isKindOfClass:NSClassFromString(@"TargetViewController")])
{
targetVC = vc;
// 也可在此直接获取 i 的数值
break;
}
}
NSInteger index = [tmp indexOfObject:targetVC];
# 3. 移除目标控制器与当前控制器之间的所有控制器
NSRange range = NSMakeRange(index + 1, tmp.count - 1 - (index + 1));
[tmp removeObjectsInRange:range];
# 4. 重新赋值给导航控制器
self.navigationController.viewControllers = [tmp copy];
以上方法需要在适当的时机执行,以免不生效