2011-05-16 63 views
2

我有一個UIViewController(MyViewController)和另一個視圖控制器,我通過My​​ViewController(稱爲SecondViewController)來模態呈現。我希望能夠通過使用如何將消息發送到UIViewController的子類parentViewController?

[self.parentViewController hideSecondViewController]; 

從SecondViewController將消息發送到MyViewController但由於parentViewController被定義爲一個UIViewController和hideSecondViewController不是的UIViewController的方法,我得到一個警告說「的UIViewController不得迴應'hideSecondViewController'「。它工作正常,因爲它可以在程序期間成功發送消息,但是由於我在MyViewController中導入了SecondViewController,因此我無法在SecondViewController中#import MyViewController。任何方式在這個?

回答

3

當談到時間以關閉模態 視圖控制器,優選的 做法是讓父視圖 控制器執行解聘。在其他 單詞中, 呈現模態視圖控制器 相同的視圖控制器也應承擔責任 解僱它儘可能。 雖然有幾種技術 用於通知父視圖控制器 ,它應駁回其模態 呈現子,優選的 技術是委託

在基於委託的模型,所呈現的視圖 控制器模態 必須定義一個協議其 代表實現。協議 定義了 模態視圖控制器響應 特定操作(如「完成」按鈕中的輕敲)而調用的方法。代表然後是 負責實施這些 方法並提供適當的 響應。在父視圖 控制器充當其模態孩子的代表 時,響應 包括在適當時關閉子視圖控制器。

閱讀更多的View Controller Programming Guide for iOS


P.S:

,因爲我在MyViewController #IMPORT SecondViewController ,我不能#IMPORT MyViewController在 SecondViewController。

要解決循環依賴性問題,您可以使用forward declaration

3

這將是更好的albertamg提議重新設計的架構,但是這應該工作:

[自 dismissModalViewControllerAnimated:YES];

您可以在呈現和呈現的視圖控制器上調用解除,它也會做同樣的事情。