【问题标题】:How to pop back to specify viewController from navigationController(viewControllers/stack)?如何从 navigationController(viewControllers/stack) 弹回指定 viewController?
【发布时间】:2012-11-15 07:45:52
【问题描述】:

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

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

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

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

UIViewControllers 中的格式应为:
"", "", "", "", ""

我尝试使用 rangeOfStringhasPrefix 获取“B”视图的索引,但失败了。

【问题讨论】:

  • 查找展开序列。这里有几个关于他们的问题。这就是你想要使用的。

标签: ios uinavigationcontroller viewcontroller


【解决方案1】:

在这里我想知道 NavigationController 通过 Concept Of Stack.ie LAST COME FIRST OUT 管理 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];

希望对你有帮助。。

【讨论】:

    【解决方案2】:

    你可能会这样做:

    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 的展开操作之前调用)。

    【讨论】:

    • @Lothario 我已经更新了我对 unwind segues 的回答,它完成了同样的事情(还有更多)。但这仅限于 iOS 6 或更高版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多