美文网首页
【功能实现】先pop再push到某个控制器的实现

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

作者: 小子爱搞事 | 来源:发表于2017-04-06 10:55 被阅读190次

    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<UIViewController *> *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<UIViewController *> *)viewControllers animated:(BOOL)animated 方法 animated 设置为 YES 即可

    NSMutableArray<UIViewController *> *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到某个控制器的实现

          本文链接:https://www.haomeiwen.com/subject/bcwfattx.html