如何弹回从navigationController(viewControllers /堆栈)指定的v

2019-07-03 20:11发布

我已经创建了串行的意见(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>”

我已经尝试和失败使用rangeOfStringhasPrefix得到“B”的看法的指数。

Answer 1:

在这里,我想知道你是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];

我希望它可以有帮助到你..



Answer 2:

你也许可以这样做:

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)?