【功能实现】先pop再push到某个控制器的实现

navigationController 中实现方法(注意:selfnavigationController):

/**
 *  push 控制器,并移除之前的 removeNums 个控制器
 *
 *  @param viewController 新 push 的控制器
 *  @param removeNums     移除前面的控制器数目
 */
- (void)pushViewController:(UIViewController *)viewController
    removeForwardControllersNums:(NSUInteger)removeNums;
- (void)pushViewController:(UIViewController *)viewController
    removeForwardControllersNums:(NSUInteger)removeNums{

    [self pushViewController:viewController animated:YES];
    
    NSMutableArray *childVcs = self.childViewControllers.mutableCopy;
    for (int index = 0; index < removeNums; index++) {
        if (childVcs.count <= 2) {
            break;
        }
        [childVcs removeObjectAtIndex:childVcs.count - 2];
    }
    [self setViewControllers:childVcs animated:NO];
}

思路:

push 到指定的控制器,然后重新设置 navigationController 的子控制器


一般情况下,只要移除需要pop的控制器,再添加指定控制器,重设 navigationController 的子控制器,- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated 方法 animated 设置为 YES 即可

NSMutableArray *childVcs = self.childViewControllers.mutableCopy;
for (int index = 0; index < removeNums; index++) {
  if (childVcs.count <= 2) {
    break;
  }
  [childVcs removeObjectAtIndex:childVcs.count - 2];
}
UIViewController *targetVc = [UIViewController new];
[childVcs addObject:targetVc];
[self setViewControllers:childVcs animated:YES];

但是,上面的方法中,如果 pop 回到了有 tabbar 的控制器,在添加指定控制器,会出现 tabbar ,因此上述方法改为第一种方法实现

无效做法:

移除控制器,再使用 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated 方法跳转。这种方法是无法成功跳转到指定控制器的

你可能感兴趣的:(【功能实现】先pop再push到某个控制器的实现)