2

我创建了一个带有串行视图(A、B、C、D、...)的应用程序,我需要将 D 弹回 B。有人可能会说为什么不使用:

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

但是,这不是一个好的解决方案。因为这个方法需要你获取我们的“B”所在的索引。

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

中的格式UIViewControllers应为:
“< A: 0x6e70710 >”、“< C: 0x6e30370 >”、“< B: 0x6988a70 >”、“< D: 0x6ea8950 >”、“< E: 0x6eaaad0 >”

我已经尝试并未能使用rangeOfStringhasPrefix获取“B”视图的索引。

4

2 回答 2

15

在这里,我想知道 NavigationController 通过Concept Of Stack.ie管理 ViewController。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];

我希望它对你有帮助。。

于 2012-11-15T07:50:09.027 回答
8

您可能可以执行以下操作:

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返回类型和UIStoryboardSegue参数的组合来识别),例如:

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

然后,B 提供的任何控制器都可以创建一个展开转场,例如,control从按钮拖动到场景停靠栏中的退出图标。您可以选择让您正在展开的控制器执行预期prepareForSegue的操作(在 B 的展开操作之前调用)。

于 2012-11-15T07:48:46.877 回答