2012-02-22 106 views
163

有人可以向我解釋modalpush segue之間的確切區別是什麼?故事板中的Modal和Push segue有什麼區別?

我知道,當我們使用push segue被添加到一個堆棧,所以當我們繼續使用push它一直佔用內存?

有人能告訴我這兩個是如何實現的嗎?

Modal塞格斯可以通過簡單的創建CTRL單擊和拖動到目的地,但是當我這樣做,與push我的應用程序崩潰。

我從一個按鈕推到UINavigationController有一個UIViewController

回答

163

A push Segue正在嚮導航堆棧中添加另一個VC。這假設產生推送的VC是被添加到堆棧的VC所屬的同一導航控制器的一部分。內存管理不是導航控制器和深層堆棧的問題。只要您正在處理可能從一個VC傳遞到另一個VC的對象,運行時就會照顧導航堆棧。看到該圖像獲得的視覺指示: NavStack

模態Segue公司僅僅是一個VC呈現另一個VC模態。風險投資並不一定要成爲導航控制器的一部分,並且虛擬地呈現的風險投資通常被認爲是呈現(父)風險投資的「孩子」。模態提供的VC通常不含任何導航欄或標籤欄。提交VC也負責解除其創建和呈現的模態VC。

希望這會有所幫助。

+1

@EIJay感謝偉大的解釋。還有一個問題,我什麼時候需要使用模態以及何時使用push segue? – 2012-02-22 12:11:26

+41

通常,當您想要顯示摘要視圖的詳細視圖時,請使用導航控制器和推送段。如果「父」視圖與數據與「子」視圖無關,則使用模式。模態視圖的一個好例子是一個Login視圖。只要數據與「父」視圖有關,登錄視圖就沒有任何關係。 – 2012-02-22 13:12:17

+0

模態視圖控制器可以調用另一個模態視圖控制器嗎? – 2012-02-22 14:39:17

6

推視圖必須建立在navigationController

點擊你的master view,然後在菜單欄中選擇:

EDITOR->embed in->navigationController 
1

這是使用自定義的推壓控制和Segue公司的方法對故事板Story Board

和模態的方式通過視圖導航,而無需使用故事板。

+0

如何在不使用故事板的情況下創建模態segue? – jianpx 2013-08-03 03:13:07

+0

@jianpx:只有當你使用故事板時,你纔可以繼續。否則,您可以使用導航控制器或PresentModalViewController在視圖之間切換。 – Pushkraj 2013-08-03 05:58:54

+0

@ Pushkraj謝謝。那麼你的意思是沒有辦法通過代碼創建segue? – jianpx 2013-08-04 04:20:28

8

雨燕3.0和8.2.1的XCode更新

1.按下S​​egue公司

推賽格瑞已更名爲顯示 SEGUE。要創建push segue,父視圖控制器需要嵌入到導航控制器中。導航控制器提供導航欄。一旦你連接兩個視圖控制器推push segue,子視圖控制器將自動具有頂部的導航欄。子視圖控制器將被添加到導航堆棧的頂部。

enter image description here

推賽格瑞還提供了默認功能。子視圖控制器將有一個返回按鈕,讓你回到父視圖控制器。您也可以向右滑動以彈出子視圖控制器。 push segue的動畫就像水平滑動頁面一樣。

enter image description here

當你被允許進行從一個視圖控制器,是不是在一個導航控制器推SEGUE,你會當你這樣做失去了所有的功能,如導航欄,動畫,手勢等。在這種情況下,您應該先將父視圖控制器嵌入到導航視圖控制器中,然後再將其推入子視圖控制器。

enter image description here

2.模態Segue公司

模態賽格瑞(即本模態),在另一方面,被呈現在當前視圖控制器。子視圖控制器不會繼承導航視圖控制器,因此如果使用導航視圖控制器從視圖控制器中呈現模態segue,導航欄將會丟失。您必須再次將子視圖控制器嵌入到導航控制器中,並在需要時啓動全新的導航堆棧。如果你想回到父視圖控制器,你必須自己來實現這一點,從代碼中調用dismiss

enter image description here

動畫模式賽格瑞是孩子視圖控制器就會從網頁底部出現。導航視圖控制器也經歷了在這個演示

enter image description here