如何根据需要弹出任何视图控制器?
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];
查看控制器 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];