2014-04-04 66 views
0

我有一個模式視圖,可以從5個不同的父視圖控制器呈現。這個模式視圖有一個按鈕,可以讓你回到父VC。許多從單個按鈕展開segues

我正在更新到iOS7,我認爲它曾經能夠使用這個單一按鈕將它關聯到我創建的所有展開賽段。但是現在,我只能將一個單一的放鬆標籤鏈接到這個按鈕上。

我在Storyboard上做了所有事情(將一件事情鏈接到另一件事情)。

Xcode 5在這個問題上有什麼改變嗎?我可以處理代碼中的所有內容,但這讓我感到困擾,因爲它在GUI上不再起作用。

任何道理?

回答

1

當我試圖弄清楚如何從一個可以從2個不同的視圖控制器呈現的模態視圖控制器中展開一個segue時,我遇到了類似的問題。我找到了一種方法來做到這一點,它涉及到一些代碼,但是你可以從Storybuilder中完成一些代碼。

我不得不意識到的是我可以在兩個不同的視圖控制器中具有相同的展開動作方法簽名。

我的應用程序有兩個視圖控制器,可以呈現模態。這兩個視圖控制器是:

主屏幕 ExploreScreen

模態視圖控制器被稱爲:

RatingScreen

根據https://developer.apple.com/library/ios/technotes/tn2298/_index.html我可以從RatingScreen通過將以下的展開行動,放鬆到主屏幕HomeScreen.m:

- (IBAction)unwindFromRatingScreen:(UIStoryboardSegue *)segue { 
    NSLog(@"Unwinding to HomeScreen"); 
} 

繼A pple的technote我控制從我的評級屏幕上的取消按鈕拖動到其退出圖標。它允許我從動作segue下拉列表中選擇unwindFromRatingScreen。請注意,如果您的項目中至少沒有定義一個展開動作,則您甚至無法控制拖動到「退出」按鈕。它在技術手冊中提到了這一點,但它並不那麼明顯。

無論如何,我在這一點上感到困惑,關於如何處理從RatingScreen退回到ExploreScreen。事實證明,我所要做的就是放置一個和HomeScreen.m相同的簽名。需要明確的是,我把這個ExploreScreen.m開卷動作:

- (IBAction)unwindFromRatingScreen:(UIStoryboardSegue *)segue { 
    NSLog(@"Unwinding to ExploreScreen"); 
} 

我很驚訝,這個工作是因爲我以爲會有在運行時有些含糊不清。 iOS如何知道要調用哪個放鬆操作?我猜它看起來有些堆疊。也許這就是技術人員試圖說的,但是由於我對「父母」和「呈現」等術語的引用感到困惑,我無法遵循它。

我讀了https://medium.com/@hamderhallas/custom-ios-modal-dismiss-segue-7e21c2bcf690後想出了第二個解決方案。我認爲它可能只適用於取消按鈕。我不知道它是否適用於需要從模式視圖控制器獲取狀態的提交按鈕,並使用它來設置您想要展開的視圖控制器中的狀態。解決方案只是告訴模態視圖控制器自行解散。同樣,iOS必須有一堆視圖控制器可以參考,以便找出在解除模式時顯示的視圖控制器。

這第二個解決方案是把下面的方法RatingScreen.m:

- (IBAction)cancelAction:(id)sender { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

我很新的iOS開發,所以我敢肯定其他人將有更多有見地的想法。但我發現這兩種解決方案都解決了類似於您的問題。對不起,我無法給你一個完全可以從Storyboard實現的解決方案。但我希望這有助於。

Michael