2015-05-22 30 views
0

我想知道UINavigationControllerUIViewController之間的差異,他們都執行選擇器dismissViewControllerAnimated。 事實是,他們都有效。我這樣做是這樣的:(UINavigationController&UIViewController)的差異執行dismissViewControllerAnimated

代碼:

UIViewController *vc = [UIViewController alloc] init]; 
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc]; 
[self presentViewController:nav animated:YES completion:nil]; 

,並在新的控制器,我這樣做:

// self.navigationController to dismiss 
[self.navigationController dismissViewControllerAnimated:YES completion:nil]; 
// self to dismiss 
[self dismissViewControllerAnimated:YES completion:nil]; 

兩個,他們工作得很好,但我不知道其中的差別?

回答

0

我們考慮第一種情況下

[self.navigationController dismissViewControllerAnimated:YES completion:nil]; 

導航控制器的根視圖控制器,你[R顯式調用同根視圖controller.which你可以說容器視圖控制器

讓我們考慮第二種情況

的駁回
[self dismissViewControllerAnimated:YES completion:nil]; 

在這種情況下,您關閉了嵌入在容器視圖控制器中的子視圖控制器。 現在假設你在推送一個視圖控制器後,現在當你打電話給dismissViewControllerAnimated時,它將忽略這兩個呈現並推送一個。

0

首先,UINavigationControllerUIViewController的子類,並且UIViewController能夠以模態方式呈現視圖。所以你可以從兩個班都出席。

當嵌入在UINavigationController一個UIViewController是可見的,基本上兩者UIViewControllerUINavigationController都同時可見的,並且既能在技術上存在的另一種模態視圖。

以模態方式呈現視圖通常意味着停止您之前爲了做其他事情而做的任何事情,然後返回到您離開的位置 - 例如,更改設置。

由於您要讓兩個視圖控制器都做其他事情,所以您從哪一個視圖控制器出發並不重要。但是,presentingViewController將根據您提供哪一個不同而不同,因此,如果您完全需要該屬性,則很重要。

也許這可能是最好的,如果模態視圖控制器以某種方式與UIViewController相關而不是UINavigationController出現,但這真的只是一種風格的東西。

+0

非常感謝,我學到了很多東西。但我更關心dismissViewControllerAnimated。 – Andy

相關問題