侧滑返回至指定控制器

今天跟朋友聊天朋友说了个奇怪的需求:手动侧滑返回需要跳转到指定页面
想了下有以下3个思路
1.自定义导航控制重写popViewControllerAnimated方法,在该方法中下文章
2.交换导航控制器子控制的顺序
3.直接将当前控制器与目标控制器之间的控制器出栈
仔细思考了下,最终使用第三种方式
第一种方式实现起来颇为麻烦
第二种方式会有点小问题,这个可以自己思考下
第三种的实现较为简单

//在需要侧滑到指定控制器的控制器的 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];

以上方法需要在适当的时机执行,以免不生效
转自:https://www.jianshu.com/p/66c41c6d9c8f

猜你喜欢

转载自blog.csdn.net/qq_28285625/article/details/107979327