2010-11-25 51 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];