有是故事板魔法來實現這一目標。它被稱爲放鬆賽。在A的.h文件中,您可以實現所需的任何「目標動作」風格方法,但無論您需要多少放鬆方式。對於一個模式,通常是兩個(取消和保存)。所以在我的文件啊我要補充:
// A.h file
- (IBAction)myCancelUnwindSegueCallback:(UIStoryboardSegue *)segue;
- (IBAction)mySaveUnwindSegueCallback:(UIStoryboardSegue *)segue;
現在,在你的故事板,如果你從A到B.現在,您可以從您的取消/保存按鈕做了「目標行動」的風格控制拖動SEGUE在B中到故事板中B控制器底部的綠色「退出」圖標。當你這樣做的時候,Xcode會選擇我們創建的兩個方法(因爲它們在A的頭文件中,並且它們有正確的簽名(例如IBAction和UIStoryboardSegue *),而B是來自A的segue的目的地)你有它。你有你想要的故事板魔法!
在兩個回調的實現,你會的東西,如:
// A.m file
- (IBAction)myCancelUnwindSegueCallback:(UIStoryboardSegue *)segue {
UIViewController *modalGoingAway = segue.sourceViewController;
// Do something (like get data) from modalGoingAway if you need to...
}
- (IBAction)mySaveUnwindSegueCallback:(UIStoryboardSegue *)segue {
UIViewController *modalGoingAway = segue.sourceViewController;
// Do something (like get data) from modalGoingAway if you need to...
}
最後,如果這種方法滿足你的需求,偉大的。你完成了。但是,如果「取消」或「保存」時我仍然連線整個協議委託/數據源設計模式,我希望在將控制權交給A以將B從視圖層次結構中移除之前,對B的私有屬性執行一些操作。
很酷,不知道呈現ViewController(顯然是一個新的iOS 5的東西),這有助於。 – Jaanus 2012-03-16 06:28:23
是的,如果你想將它作爲一個自定義的繼續以方便重用,你可以做一些類似於 - (void)執行{UIViewController * src =(UIViewController *)self.sourceViewController; [src.presentingViewController dismissModalViewControllerAnimated:YES]; } – AppHandwerker 2012-08-10 14:02:58
@SimonH關於segues的最佳建議! – 2012-10-06 21:19:13