Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何解除两个或多个dismissModalViewController?_Iphone_Objective C_Dismiss - Fatal编程技术网

Iphone 如何解除两个或多个dismissModalViewController?

Iphone 如何解除两个或多个dismissModalViewController?,iphone,objective-c,dismiss,Iphone,Objective C,Dismiss,我需要关闭两个模态视图控制器,我知道如何弹出两个或多个视图控制器 UINavigationController* navController = self.navigationController; NSArray *array=[navController viewControllers]; UIViewController* controller = [navController.viewControllers objectAtIndex:0]; [n

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

        UINavigationController* navController = self.navigationController;
    NSArray *array=[navController viewControllers];
    UIViewController* controller = [navController.viewControllers objectAtIndex:0];
    [navController popToViiewController:controller animated:YES];
这是我可以导航回我的第一个视图的方式,但是如果有两个或更多的视图,那么我如何导航回第一个视图呢

请帮帮我, 非常感谢。
Madan Mohan

来自
-[UIViewController dismissModalViewController]
的文档:

如果您呈现多个模态视图 控制器相继出现,因此 构建一个模态视图堆栈 控制器上调用此方法 查看堆栈中较低的控制器 取消其直接子视图 控制器和所有视图控制器 在堆栈上的子对象上方。什么时候 这种情况发生时,只有最上面的视图 以一种生动的方式被抛弃; 任何中间视图控制器都是可用的 只是从堆栈中删除。这个 使用其 模态转换样式,可能 不同于其他人使用的样式 查看堆栈中较低的控制器

如果在上面的代码中将对象设置为索引0,它将带您进入第一个视图,这是一个推视图控制器

1) Rootview-->moodalview1-->moodalview2-->moodalview3如果您使用上述代码,那么您将处于root视图中


2) Rootview-->Pushview1-->moodalview1-->moodalview2-->moodalview3。如果您使用上述代码,您将处于PushView中。

我使用以下实用程序静态方法模拟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];
    }
}

然后将modals的数量传递给pop,或仅-1传递给pop直到根目录。

对于
ios5
,支持
动画
=
是(视图将按顺序隐藏)和
完成
块:

+ (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];
         }];
     }
}
使用下面的代码

[[[self presentingViewController] presentingViewController]  dismissModalViewControllerAnimated:YES];

要弹出到根视图控制器,只需执行以下操作:
[self.navigationController popToRootViewControllerAnimated:YES],而不是你的方式,这是一个有点不方便。它是目前模态视图控制器,我如何才能弹出它
[[[self presentingViewController] presentingViewController]  dismissModalViewControllerAnimated:YES];