如何弹回rootViewController +1?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何弹回rootViewController +1?相关的知识,希望对你有一定的参考价值。

我需要弹回一些视图,但不是一直回到根控制器,我找不到一种方法,而不是一直回到使用以下

[self.navigationController popToRootViewControllerAnimated:YES];

如何弹回root + 1?

答案
int viewControllerIndex = 1; //Note that object 1 is the first object after the root
NSArray *viewControllersArray = self.navigationController.viewControllers ;
[self.navigationController popToViewController:viewControllersArray[viewControllerIndex] animated:YES];
另一答案

如果你知道想要支持的viewcontroller是什么。

 UIViewController *targetVC = XXViewController.class ;
NSArray <UIViewController *>*vcs = self.navigationController.viewControllers ;
[vcs enumerateObjectsUsingBlock:^(UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    if ([obj isKindOfClass:targetVC.class]) {
        [self.navigationController popToViewController:obj animated:YES];
        *stop = YES ;
    }
}];

如果您知道要备份的索引。

 NSInteger index = 1 ;
[self.navigationController popToViewController:vcs[index] animated:YES];

跟随并不重要

目前你有AA,BB两个viewcontroller在你的导航。你转到DD viewcotrlooer并且不想在回来时显示最后一个viewcontroller。当您弹出DD viewcotrller时,您可以使用以下代码。最重要的是支持侧滑。

[self skipCurrentViewcontrollerToViewcontroller:DD.new];


 - (void)skipCurrentViewcontrollerToViewcontroller:(UIViewController *)toVC
{
    if (self.navigationController == nil) {
        NSAssert(NO, @"the navigation is empty!");
        return ;
    }
    NSArray *vcArray = self.navigationController.viewControllers ;
    if (vcArray.count > 0) {
        NSMutableArray *desArray = [NSMutableArray arrayWithCapacity:4];
        for (int i = 0 ;i < vcArray.count - 1 ; i++) {
            [desArray addObject:vcArray[i]];
        }
        [desArray addObject:toVC];
        [self.navigationController setViewControllers:desArray animated:YES];
    }
    else{
        [self.navigationController pushViewController:toVC animated:YES];
    }
}
另一答案

我正在使用以下方法来弹出特定的VC:

-(void)popToViewControllerWithAnimation:(BOOL)showAnim WithClass:(Class)class{
for(UIViewController *vc in self.navigationController.viewControllers){
    if([vc isKindOfClass:class]){
        [self.navigationController popToViewController:vc animated:showAnim];
        break;
    }
  }
}

-(void)popViewControllers:(int)count{
   [self.navigationController popToViewController: self.navigationController.viewControllers[self.navigationController.viewControllers.count-count-1] animated:YES];
}

以上是关于如何弹回rootViewController +1?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不传递委托的情况下从 RootViewController 调用 AppDelegate 方法?

如何在预览中设置环境对象

iPad UITableView 滚动弹回顶部

如何以编程方式声明和显示我的 UITableView? [关闭]

如何实现Android Pull-to-Refresh

Vue练习六十一:08-03拖拽_bug版