pop返回到指定控制器(该页控制器不在navigationController的栈中)

最近项目中有个需求,需要pop到指定的控制器页面,比较郁闷的是该控制器并没有在导航控制器的栈中,常用的pop方法并不能直接使用.常用的pop到上一级的方法有两种:
  • 1 推出到根视图控制器

      [self.navigationController popToRootViewControllerAnimated:YES];
    
  • 2 推出到指定的视图控制器

     for (UIViewController *controller in self.navigationController.viewControllers) {
         if ([controller isKindOfClass:[ExampleController class]]) {
              ExampleController *e =(ExampleController *)controller;
              [self.navigationController popToViewController:e animated:YES];
          }
     }
     ExampleController为指定pop到的控制器
    
所遇到问题的解决方案是:
int currentIndex = 0;
for (UIViewController *controller in self.navigationController.viewControllers) {
    if ([controller isKindOfClass:[LastController class]]) {
        // 初始化将要push的控制器
        ExamleController *newVC = [[ExamleController alloc] init];
                        
        // 获取当前栈中的控制器数组
        NSMutableArray *vcArray = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
        NSLog(@"设置前:vcArray == %@", vcArray);

        // 获取当前控制器在栈中的位置
        int index = currentIndex;
                        
        // 移除当前路由器
        [vcArray removeObjectAtIndex:index];
        // 添加新控制器
        [vcArray insertObject:newVC atIndex:(index - 1)];
                        
        // 重新设置当前导航控制器的路由数组
        [self.navigationController setViewControllers:vcArray animated:YES];
        NSLog(@"设置后:the vcArray == %@", vcArray);
        [self.navigationController popToViewController:newVC animated:YES];
       break;
    }
    currentIndex ++;
}  
LastController    : 当前显示控制器的上一级控制器
ExamleController  : 未在栈中,需要pop到的控制器

你可能感兴趣的:(pop返回到指定控制器(该页控制器不在navigationController的栈中))