如何解雇两个或多个dismissModalViewController?

时间:2010-11-25 10:50:46

标签: iphone objective-c dismiss

我需要关闭两个模态视图控制器,我知道如何弹出两个或多个视图控制器

        UINavigationController* navController = self.navigationController;
    NSArray *array=[navController viewControllers];
    UIViewController* controller = [navController.viewControllers objectAtIndex:0];
    [navController popToViiewController:controller animated:YES];

这是我如何导航回我的第一个视图,但如果有两个或更多的消除模态视图,那我该如何导航回来

请帮帮我, 谢谢, Madan Mohan

5 个答案:

答案 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];
         }];
     }
}