我已经创建了串行的意见(A,B,C,d,...)的应用程序,我需要d弹回至B.有人可能会说为什么不使用:
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:1] animated:YES];
然而,这不是一个很好的解决方案。 由于这种方法需要你得到,我们的“B”是在商店的指数。
问 :如何获得“B”在viewControllers指数?
在格式UIViewControllers
应该是:
“<A:0x6e70710>”, “<C:0x6e30370>”, “<B:0x6988a70>”, “<d:0x6ea8950>”, “<E:0x6eaaad0>”
我已经尝试和失败使用rangeOfString
和hasPrefix
得到“B”的看法的指数。
在这里,我想知道你是NavigationController由管理视图控制器Concept Of 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
将是对3号位置,这样你可以做什么
你可以硬接线的指数,如下
[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中,你可以只使用开卷塞格斯,它负责所有这一切都为你。 只要到您的B级,定义一个开卷动作(标识为这种由组合IBAction
返回类型和UIStoryboardSegue
参数),例如:
- (IBAction)done:(UIStoryboardSegue *)segue
{
// do any clean up you want
}
然后,这是由B中任何控制器能然后可创建由退绕SEGUE,例如, 控制从一个按钮以在场景中的坞退出图标-dragging。 您可以选择有你展开从完成预期的控制器prepareForSegue
(这是前B的退绕动作调用)。
文章来源: How to pop back to specify viewController from navigationController(viewControllers/stack)?