如何根据需要弹出任何视图控制器?

How can I pop to any view controller as I wish?

查看控制器 A B C D A -> B -> C -> D popViewController 仅从 D 到 C popViewTopController 只从 D 到 A; 如果我有 10 个视图控制器,我可以通过任何方式弹出任何视图吗?

谢谢大家。 popViewController 会弹出到新的视图控制器吗?

这就是您正在寻找的方法(reference)

在 Obj-c 中

- (NSArray *)popToViewController:(UIViewController *)viewController
                    animated:(BOOL)animated

您应该传入要弹出的视图控制器

使用以下 UINavigationController 方法转到当前堆栈上的任何视图控制器。

- (NSArray *)popToViewController:(UIViewController *)viewController 
                        animated:(BOOL)animated

例如,如果您在一个 UIViewController 中并且您想要弹出回堆栈中的第三个:

UINavigationController * nc = self.navigationController;
UIViewController * popToVC = [nc.viewControllers objectAtIndex:2];
[nc popToViewController:popToVC animated:YES];

选项 1:Select class

要让navigationController弹到特定的class,您可以按如下操作:

NSArray *allViewControllers = [self.navigationController viewControllers];
for (UIViewController *aViewController in allViewControllers) 
{
  if ([aViewController isKindOfClass:[B class]]) 
  {
    [self.navigationController popToViewController:aViewController animated:YES];
  }
}

请注意,如果您不多次推送相同 class 的实例,则只应使用此选项。

选项 2:Select 按级别

如果你想弹出到一个特定的级别,你可以通过 self.navigationController.viewControllers 处的索引 select 它,因为它对应于级别。第一个推送的 UIViewController 将在索引 0 处,第二个在索引 1 处,依此类推:

NSArray *allViewControllers = [self.navigationController viewControllers];
UIViewController *aViewController = [allViewControllers objectAtIndex:level];
[self.navigationController popToViewController:aViewController animated:YES];
SecondViewController *sec = [SecondViewController alloc] init];
[self.navigationController popViewController:Sec animated:YES];

如果你想弹出任何你想改变的视图objectAtIndex:1,2,3..etc 它会从任何视图弹出到第一,第二等...。

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