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

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

这就是我可以导航回到我的第一个视图的方式

请帮助我,谢谢,Madan Mohan

有帮助吗?

解决方案 4

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

如果将对象设置为上述代码中的索引0,则将带您到第一个视图,这是推动视图控制器。

1)rootview ---> moodAlview1 ---> moodAlview2 ---> moodAlview3如果您使用上述代码,则在root视图中。

2)rootview ---> pushView1 ----> moodAlview1 ---> moodAlview2 -----> moodAlview3。如果您使用上述代码,则将在PushView中。

其他提示

从文档 -[UIViewController dismissModalViewController]:

如果您连续介绍几个模态视图控制器,从而构建了一堆模态视图控制器,则在堆栈中较低的视图控制器上称此方法将其直接的儿童视图控制器和所有视图控制器拒绝堆栈上的孩子。发生这种情况时,只有最高的视野以动画方式被忽略。任何中间视图控制器都会简单地从堆栈中删除。最高视图是使用其模态过渡样式忽略的,这可能与堆栈中其他视图控制器使用的样式不同。

使用以下代码

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

我使用以下实用程序静态方法来模拟一堆模式:

// 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];
    }
}

然后将模态数传递给弹出,或者仅为-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];
         }];
     }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top