2015-08-15 85 views
2

創建一個按鈕,從第二個ViewController退出到前一個ViewController。我已經閱讀過教程,應該使用視圖控制器中的「EXIT」。 (控制+點擊+拖動按鈕到EXIT)。麻煩理解Obj-C MVC:退出並展開Segue

我在第二個控制器上創建了一個「退出」按鈕,並且在ViewController類上創建了一個方法,以便與control + click + drag exit segue掛鉤。這種方法完全是空的:

- (IBAction) unwindToMainMenu:(UIStoryboardSegue *) unwindSegue 
{ 

} 

然而,當我按下它返回到我預期之前的視圖控制器的按鈕,但我期待什麼應該發生(因爲該方法沒有內容)。

我認爲傳遞給此方法的StoryboardSegue對象是這個EXIT,我拖動了按鈕,但沒有處理該對象的代碼。

編輯: 此外,我沒有返回任何東西,但該方法的聲明說它應該返回一個IBAction。爲什麼編譯器不抱怨?

你能幫我理解我錯過了什麼嗎?

+1

你看看[「技術說明TN2298 - 使用展開細節「](https://developer.apple.com/library/ios/technotes/tn2298/),其中描述了所有血淋淋的細節? –

+1

我剛開始研究Obj-c,並且仍然習慣了蘋果文檔。感謝您的鏈接 - 這是一個很好的發現。我需要一段時間來消化這個。如果我正確讀取它,我創建的這個方法是在執行segue之前的一個額外操作。不過,這不應該失敗嗎?我不會在我新創建的方法上返回任何內容:S – jplebre

回答

4

歡迎計算器,

首先,IBAction爲只是一種方式說「你可以拖動到這個」爲Xcode的,它不是真像一個返回類型,我只是認爲這是無效的。

其次,它是如預期運行:d基本上像你現在就可以調用此方法與故事板掛鉤起來,也可以手動調用它:

[self performSegueWithIdentifier:@"unwindToMainMenu" sender:self]; 

和所有的變量您在當前視圖控制器中設置的屬性將被傳回到您要展開的源視圖控制器。

-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue { 
    if ([segue.identifier isEqualToString:@"unwindToMainMenu"]) { 
    VcExample *vcExample= (VcExample *)segue.sourceViewController; 
    NSString *string = vcExample.aVariableNameYoureInterestedInFromTheVCYouUnwoundFromLolThisIsLong; 
    } 
} 

退繞賽格瑞只是一個內置的功能,如果你鉤住扣它,它就會Segue公司

+2

謝謝Ben! :) 這是有道理的,真的很清楚。只是爲了看看我是否理解了「你可以拖到這裏」。 IBAction實際上是無效的,XCode將它用作交互式故事板構建器的標誌或句柄,就好像它是返回類型的重載一樣? – jplebre

+0

是的,正確的。在寫完之前,我有一點點的確認,但是我是對的,無效的和IBAction完全相同,除了構建器的交互性。你甚至可以使用IBAction而不是在方法中返回void,並且它沒有任何區別,因爲它沒有連接任何東西。 Xcode非常好,我喜歡在Android上開始學習它。享受好友:) – Ben