我需要关闭两个模态视图控制器,我知道如何弹出两个或多个视图控制器
UINavigationController* navController = self.navigationController;
NSArray *array=[navController viewControllers];
UIViewController* controller = [navController.viewControllers objectAtIndex:0];
[navController popToViiewController:controller animated:YES];
这是我如何导航回我的第一个视图,但如果有两个或更多的消除模态视图,那我该如何导航回来
请帮帮我, 谢谢, Madan Mohan
答案 0 :(得分:5)
来自-[UIViewController dismissModalViewController]
的文档:
如果你提出几种模态视图 控制器连续,因此 建立一堆模态视图 控制器,调用此方法 查看控制器在堆栈中较低 驳回其直接的儿童观点 控制器和所有视图控制器 在堆栈上面的那个孩子。什么时候 发生这种情况,只有最顶层的视图 以动画的方式被驳回; 任何中间视图控制器 只是从堆栈中删除。该 最顶层的视图使用它被驳回 模态过渡风格,可能 与其他人使用的风格不同 查看控制器在堆栈中较低。
答案 1 :(得分:4)
使用以下代码
[[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES];
答案 2 :(得分:3)
我使用以下实用程序静态方法为一堆模态模拟popToRootViewController:
// Util.m
+ (void)popModalsToRootFrom:(UIViewController*)aVc {
if(aVc.parentViewController == nil) {
return;
}
else {
[Util popModalsToRootFrom:aVc.parentViewController]; // recursive call to this method
[aVc.parentViewController dismissModalViewControllerAnimated:NO];
}
}
你这样使用它:
[Util popModalsToRootFrom:aViewController];
如果你想要更高级的东西,你可以这样做:
+ (void)popModalsFrom:(UIViewController*)aVc popCount:(int)count {
if(aVc.parentViewController == nil || count == 0) {
return;
}
else {
[Util popModalsFrom:aVc.parentViewController popCount:count-1]; // recursive call to this method
[aVc.parentViewController dismissModalViewControllerAnimated:NO];
}
}
然后将模态数传递给pop,或者只传递-1以一直弹出到root。
答案 3 :(得分:2)
UINavigationController* navController = self.navigationController;
NSArray *viewControllers=[navController viewControllers];
UIViewController* controller = [viewControllers objectAtIndex:0];
[navController popToViewController:controller animated:YES];
如果在上面的代码中将对象设置为索引0,它将带您进入第一个视图,这是一个推视图控制器。
1)Rootview ---> moodalview1 ---> moodalview2 ---> moodalview3如果您使用上面的代码,那么您将处于根视图中。
2)Rootview ---> Pushview1 ----> moodalview1 ---> moodalview2 -----> moodalview3。如果您使用上面的代码,您将进入PushView。
答案 4 :(得分:1)
对于iOS 5
,支持animation
== YES
(视图将按顺序隐藏)和completion
阻止:
+ (void)dismissAllVCsForVC:(UIViewController *)VC animated:(BOOL)animated completion:(BPSimpleBlock)completion {
if (VC.presentedViewController == nil) {
if (completion) {
completion();
}
} else {
[BaseViewController dismissAllVCsForVC:VC.presentedViewController
animated:animated
completion:
^{
[VC dismissViewControllerAnimated:animated completion:completion];
}];
}
}