2010-11-25 71 views
5

我需要驳回两个相模态视图控制器,我知道该怎么弹出两个或多个视图控制器如何解散两个或更多dismissModalViewController?

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

这是怎么了,我可以导航回到我的第一个观点,但如果有两个或更多的解雇模式视图然后我如何可以返回

请帮帮我, 谢谢 马丹磨憨

+1

为了弹出到可以根视图控制器只需做到这一点:`[self.navigationController popToRootViewControllerAnimated:YES];`而不是你的方式,这有点虚胖。 – 2010-11-25 11:03:10

回答

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中。

5

从文档的-[UIViewController dismissModalViewController]

如果你提出几个模式的看法 控制器在连续,从而 建设模式的看法 控制器的堆栈,调用 视图控制器这种方法在堆栈中较低 驳回其直接子视图 控制器和所有视图控制器 上方的那个孩子在堆栈上。当 发生这种情况时,只有最上面的视图 以动画形式被解雇; 任何中间视图控制器 只是从堆栈中删除。 最顶端的视图使用其 模式转换样式,可能 不同于其他 视图控制器中较低的视图控制器使用的样式。

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

然后通过模态数弹出,或只是-1弹出一个通向根的路。

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

使用此下面代码

[[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES]; 
相关问题