如何从navigationController(viewControllers / stack)popup来指定viewController?

我已经创build了一个串行视图(A,B,C,D,…)的应用程序,我需要popupD到B.有人可能会说为什么不使用:

[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:1] animated:YES]; 

但是,这不是一个好的解决scheme。 因为这个方法需要你得到我们的“B”存储的索引。

问题 :如何获取viewControllers中的“B”的索引?

UIViewControllers格式应该是:
“<A:0x6e70710>”,“<C:0x6e30370>”,“<B:0x6988a70>”,“<D:0x6ea8950>”,“<E:0x6eaaad0>”

我试过了,没有使用rangeOfStringhasPrefix来获取“B”视图的索引。

在这里,我想知道你的NavigationController的pipe理视图控制器的Concept Of Stack Stack.ie LAST COME FIRST OUT这里是两个方法做同样的。

1)在这里,你可以进行迭代获得所需的ViewController作为下面

  for (id controller in [self.navigationController viewControllers]) { if ([controller isKindOfClass:[BViewController class]]) { [self.navigationController popToViewController:controller animated:YES]; break; } } 

2)在这里你有A,B,C,D控制器。 意味着B将在第三位,所以你可以做什么

你可以硬连线索引如下

  [self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:2] animated:YES]; 

我希望这可能对你有帮助..

你大概可以这样做:

 for (UIViewController *controller in [self.navigationController viewControllers]) { if ([controller isKindOfClass:[B class]]) { [self.navigationController popToViewController:controller animated:YES]; break; } } 

更新:

在iOS 6中,您可以使用unwind segues,这将为您处理所有这些问题。 只需去你的B类,定义一个展开动作(通过IBAction返回types和UIStoryboardSegue参数的组合来确定),例如:

 - (IBAction)done:(UIStoryboardSegue *)segue { // do any clean up you want } 

然后,B提供的任何控制器都可以通过例如控制从button拖动到场景的停靠栏中的退出图标来创build放松继续。 您可以select让您从开始的控制器执行预期的prepareForSegue (在B的展开操作之前调用)。