5

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

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

这就是我可以导航回我的第一个视图的方式,但是如果有两个或多个关闭模式视图,那么我该如何导航回来

请帮帮我,谢谢,马丹·莫汉

4

5 回答 5

5

从文档中-[UIViewController dismissModalViewController]

如果您连续呈现多个模态视图控制器,从而构建一个模态视图控制器堆栈,则在堆栈中较低的视图控制器上调用此方法会关闭其直接子视图控制器以及堆栈上该子视图控制器上方的所有视图控制器。发生这种情况时,只有最顶层的视图会以动画方式消失;任何中间视图控制器都简单地从堆栈中删除。最顶层的视图使用其模态转换样式被解除,这可能与堆栈中其他视图控制器使用的样式不同。

于 2010-11-29T15:03:32.083 回答
4

使用下面的代码

[[[self presentingViewController] presentingViewController]  dismissModalViewControllerAnimated:YES];
于 2012-10-18T10:21:46.390 回答
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以一直弹出到根。

于 2011-06-01T18:54:09.270 回答
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 中。

于 2010-12-01T07:44:16.847 回答
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];
         }];
     }
}
于 2012-09-16T23:45:00.787 回答