23

是什麼beetween調用presentModalViewControllerpushViewController,當差:iOS版 - pushViewController VS presentModalViewController差異

  • 動畫設置爲NO(即使是的,這只是可以改變的動畫風格)。呈現模式的看法時
  • 導航控制器的定義,所以它可以通航也與調用堆棧,...

這只是爲了能夠從第一回推圖? Woooaaaaaa .....

我想這個區別是在其他地方和更深層次。不是?

回答

11

最重要的區別是關於語義。模態視圖控制器通常指示用戶必須提供一些信息或做某事。此鏈接更多的解釋了它的深度:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

下面是另一個,只講不那麼抽象的區別:

「當你提出一個模態視圖控制器,系統將創建一個沒有視圖控制器之間的父子關係呈現和呈現的視圖控制器,具體來說,做呈現的視圖控制器更新其modalViewController屬性以指向其呈現的(子視圖)控制器。同樣,呈現的視圖控制器更新其parentViewController屬性以指向視圖顯示它的控制器。「

也看到這個線程:why "present modal view controller"?

15

忽略轉換/動畫和事情是如何幕後(其中aleph_null的alswer提供了一個很好的討論)結構,唯一的面向用戶的區別是返回的能力使用導航欄自動在前視圖。

如果您使用pushViewController,您將自動獲得導航欄中的「後退」按鈕。如果您使用presentModalViewController,則不需要,並且通常必須實施自己的控件和/或回調來處理解除控制器。

從概念上講,模態表示風格通常用於無法離開的原子任務(即,您要麼完成任務,要麼取消,並且除非您執行一個或另一個操作,否則無法在應用程序中執行其他任何操作) 。

如果你想知道爲什麼有第一位的差異,我不能說。就我個人而言,我認爲爲從一個控制器移動到另一個控制器(如cocos2d或Android)提供統一API的框架更有意義。

+0

這是最重要的區別! –

1

這是我的經驗說的話,如果你想管理視圖的層次,更好地去pushViewController導航控制器。它在導航控制器中像一堆視圖控制器一樣工作。但是,如果要求只是顯示在父視圖控制器上執行某些操作的視圖,那麼最好的方式是以模態方式顯示它。 如果你需要一個複雜的推彈出邏輯總是喜歡pushViewController。

1

採取在左上角一看進入viewControllers圖像中

  • 頂部2 viewControllers(登錄&提交)是tabBarController & NavigationController
  • 的其他部分相分離 viewControllers的內嵌在NavigationController中。它們以某種方式屬於應用程序的自然流程。

現在你要問自己

我需要總是顯示登錄+每次提交頁面?即使上次登錄,每次登錄都會讓用戶感到痛苦。這兩個屏幕真的不適合屏幕的自然流程。那麼我們該怎麼辦?我們只是將它們添加模態使用presentViewController

不過,對於viewControllers的其餘部分,我們希望讓他們裏面2導航,所以我們可以很容易地來回走所以我們使用pushViewController

enter image description here

對於更多信息我建議你看看這個video 該圖像也摘自this偉大的答案。值得一看。