如何从 navigationController(viewControllers/stack) 弹回指定 viewController?

Posted

技术标签:

【中文标题】如何从 navigationController(viewControllers/stack) 弹回指定 viewController?【英文标题】:How to pop back to specify viewController from navigationController(viewControllers/stack)? 【发布时间】: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”视图的索引,但失败了。

【问题讨论】:

查找展开序列。这里有几个关于他们的问题。这就是你想要使用的。 【参考方案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 或更高版本。

以上是关于如何从 navigationController(viewControllers/stack) 弹回指定 viewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 TabBarController 上 NavigationController 的 TableViewController 子项锁定旋转

如何从 navigationController(viewControllers/stack) 弹回指定 viewController?

如何使用 Flip Transition 从 UIView 转到带有 NavigationController 的 TableViewController?

如何从 ViewController 中分离(推送)到 NavigationController 中嵌入的另一个 ViewController?

从AppDelegate中访问NavigationController指向的初始视图

如何在不使用 NavigationController 的情况下从一个视图导航到另一个视图?