如何按我的意愿弹出任何视图控制器?

时间:2015-06-09 09:25:21

标签: ios viewcontroller

查看控制器A B C D. A - > B - > C-> d popViewController只能形成D到C popViewTopController只能形成D到A; 如果我有10个视图控制器,我可以按任何方式弹出任意视图吗?

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

5 个答案:

答案 0 :(得分:3)

选项1:按班级选择

要告诉navigationController弹出特定课程,您可以执行以下操作:

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

考虑到你应该只使用它,如果你没有多次推动同一个类的实例。

选项2:按级别选择

如果要弹出到特定级别,只需按self.navigationController.viewControllers处的索引选择它,因为它对应于级别。第一个推送的UIViewController将在索引0处,第二个在索引1处,依此类推:

NSArray *allViewControllers = [self.navigationController viewControllers];
UIViewController *aViewController = [allViewControllers objectAtIndex:level];
[self.navigationController popToViewController:aViewController animated:YES];

答案 1 :(得分:0)

这是您要查找的方法(reference)

在Obj-c

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

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

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

如果要弹出任何想要更改的视图fragment:1,2,3..etc 它将从任何视图弹出到第一个,第二个等。

objectAtIndex

答案 4 :(得分:-1)

SecondViewController *sec = [SecondViewController alloc] init];
[self.navigationController popViewController:Sec animated:YES];