2012-09-13 64 views
101

我剛剛安裝了Xcode 4.5 for iOS6支持,我在故事板中看到一個名爲'Exit'的新圖標,列在我的視圖控制器和'First Responder'等下方。標記爲「退出」的圖標。Xcode 4.5故事板'退出'

我可以找到任何東西,也不知道如何使用它。

任何人都知道它,它是如何工作的,它的用途是什麼?

+1

在一個類似的問題,我張貼了這個答案: http://stackoverflow.com/questions/12569316/does-anyone-know-what-the-new-exit-icon-is-used-for-當編輯故事板 - usi/13437054#13437054 它有助於解釋如何使用退出(展開)功能 – Eric

回答

72

這稱爲「展開塞格」。遺憾的是這個沒有文檔到目前爲止,除了上了XCode 4.5新功能列表簡單提一下,指出:

開卷塞格斯可以允許在故事板

可喜轉變爲場景 的現有實例是否有來自WWDC 2012解釋這些生物(除其他之外)的會話。

您可以使用開發人員帳戶詳細信息登錄Apple的iOS開發人員中心,然後轉至WWDC 2012 videos page並觀看「在應用程序中採用故事板」(它位於頂部第五位)關於unwind的討論始於時間37: 20。


更新: 這裏是從蘋果的文檔

是放鬆seques命名的退出佔位符對象標的一些更多的信息。默認情況下,當用戶關閉子場景時,該場景的視圖控制器 展開(或返回)到父場景 - 即 最初轉換到子場景的場景。但是,退出對象 可使視圖控制器放鬆到任意場景。

(從iOS6的文檔集>常規>入門)

And here is a nice example of how you can implement one


另一個更新:

Here is a technical note from Apple關於這個話題。

+3

好吧,那麼你如何使用它?嘗試控制 - 點擊從視圖控制器底部的退出對象,但它不會鏈接到任何東西。 – shim

+4

你基本上必須爲你的展開順序定義一個方法,然後從一個元素連接到'exit'按鈕,選擇你想調用的方法。你可以在這裏找到一個例子(http://www.techotopia.com/index.php/Using_Xcode_Storyboarding_(iOS_6)#Unwinding_Storyboard_Segues)(我已經更新了我的答案以及包括這個例子) – Alladinian

+1

-1:很多單詞,一點有用的信息。在閱讀完本書並在我自己的應用程序中使用它之後,我寫下了這個答案,希望它更有用:http://stackoverflow.com/a/25829835/901641 – ArtOfWarfare

4

另請參閱Cannot Connect Storyboard Unwind Segue其中闡明瞭使Exit圖標生效的要求。你必須有,在視圖控制器層次更高了,一個方法,那就是:

  1. 標記爲IBAction爲

  2. 需要指定一個參數是一個UIStoryboardSegue *

如果這兩個條件得到滿足,Exit圖標將會看到它,並允許您通過控制 - 從同一個視圖控制器中的按鈕拖動來連接它。

我現在也張貼在這裏是世界上最簡單的例子:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard(固定的2013 7月12日)

這表明現在是怎樣十分容易從呈現的視圖控制器原因請看和背部,而不是你以前爲了來回傳遞信息所做的所有工作(模板中的代碼和協議,現在可以刪除所有這些內容)。

3

只需在需求定義中添加一些細微的內容即可。這是基於Xcode 4.6的實驗。我發現它只是聲明(!)的方法,使Xcode能夠實現所需的控制拖動響應。這是我發現的所有要求:

  • 標記爲IBAction
  • 需要指定一個參數是一個UIStoryboardSegue *
  • 你必須有一個動作聲明(但不一定實現[指在一個方法.M實施部分])。
  • 它可以在任何類的接口聲明中,即使是除了appdelegate類之外的.M的接口部分。 (我沒有看到它在控制器層次結構中的位置的任何依賴關係,你可以添加任何舊文件,系統似乎彙集了所有具有UIStoryboardSegue參數的方法,並將它們顯示在Exit圖標的菜單上。)注意,如果該方法在故事板編輯器中正在操作的場景的類中,則拖動菜單甚至會向您顯示您的方法,但它將顯示爲不帶冒號,並且在運行時似乎不會觸發任何操作。

例子: -(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;

10

想象一下,你有意見,你的故事板序列:

A -> ... -> Z

你想有觀點Z一個按鈕,允許用戶將全力以赴回到A的方式。

所以,你需要做的就是給你要一路背出來,在這種情況下,A,其中被標記爲IBAction,並採取了UIStoryboardSegue *類型的單個參數的實例方法的看法。方法和變量的名稱無關緊要。你在實施過程中所做的事情也無關緊要。下面是一個例子:

的OBJ-C:
A的接口(未Z'S):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue; 

A的實施(未Z'S):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue { 
    // Only "implemented" to satisfy a respondsToSelector: search. 
    // You can actually implement more stuff here, if you want, IE, if 
    // you need to reach out to a server to mention that this screen was 
    // returned to from a later screen. 
} 

Swift:
In A的源(未Z的):現在

@IBAction func cancelSignup(unwindSegue: UIStoryboardSegue) { 
    // Only "implemented" to satisfy a respondsToSelector: search. 
    // You can actually implement more stuff here, if you want, IE, if 
    // you need to reach out to a server to mention that this screen was 
    // returned to from a later screen. 
} 

,故事板,控制從一個元件拖動Z內(即,取消按鈕)ZExit。它將掃描視圖層次結構中所有視圖中具有IBAction的所有視圖,該視圖只接受一個UIStoryboardSegue *作爲操作並列出供您選擇。

希望這比現有的答案更直接,更有幫助。我發現這個鏈接是特別有用的,所以如果有一個細節在閱讀我的答案後仍然很模糊,也許這可以幫助你(我試圖將這篇長篇文章中的所有有用信息壓縮成一個簡短的答案): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html