Ios 如何从navigationController(viewController/stack)弹出指定viewController?
我已经创建了一个具有串行视图(A、B、C、D等)的应用程序,需要将D弹回到B。 有人可能会说为什么不使用:Ios 如何从navigationController(viewController/stack)弹出指定viewController?,ios,uinavigationcontroller,viewcontroller,Ios,Uinavigationcontroller,Viewcontroller,我已经创建了一个具有串行视图(A、B、C、D等)的应用程序,需要将D弹回到B。 有人可能会说为什么不使用: [self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:1] animated:YES]; 然而,这并不是一个好的解决办法。因为这个方法需要你得到我们的“B”存储在其中的索引 问题:如何获取ViewController中“B”的索引
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:1] animated:YES];
然而,这并不是一个好的解决办法。因为这个方法需要你得到我们的“B”存储在其中的索引
问题:如何获取ViewController中“B”的索引
UIViewControllers
中的格式应为:“
我尝试使用
rangeOfsString
和hasPrefix
获取“B”视图的索引,但失败。您可能可以执行以下操作:
for (UIViewController *controller in [self.navigationController viewControllers])
{
if ([controller isKindOfClass:[B class]])
{
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
更新: 在iOS 6中,您只需使用unwind segues即可,它为您解决所有这些问题。只需转到B类,定义一个展开操作(通过组合
iAction
返回类型和UIStoryboardSegue
参数来识别),例如:
然后,由B显示的任何控制器都可以创建一个展开序列,例如,通过控制从按钮拖动到场景驳接中的退出图标。您可以选择让要从中展开的控制器执行预期的
prepareforsgue
(在B的展开操作之前调用).在这里,我想知道NavigationController通过堆栈的概念来管理ViewController
。即最后一个先出的方法
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];
我希望它能对你有所帮助。查找展开段。这里有一些关于他们的问题。这就是你想要使用的。@Lothario我已经更新了我的解圈步骤的答案,它完成了同样的事情(还有更多)。但这只是iOS 6或更高版本。
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:2] animated:YES];