2012-02-27 45 views
0

私のメイン(ルート)ビューXは、メソッドpopulateMainScreen()のデータで作成されています。親ビュー内のデータを子ビューから変更IOS

メインビューX内の1つのボタンをクリックすると、子ビューYが画面に表示されます。

XのこのpopulateMainScreen()メソッドをYから起動して、ビューXを変更する必要があります。

今後いつでも移動しても、新しい更新バージョンが表示されるはずです。

+0

非常に簡単です:[Y superview]はXです。 – NeverBe

+0

XとYの関係を明確にするために質問を修正できますか? YはXのサブビューですか、XとYは親子関係の2つのView Controllerのそれぞれのビューですか? – Caleb

+0

@Caleb YはX –

答えて

2

適切なMVCの実装では、XとYの両方のビューコントローラに、必要なデータを共通のモデルオブジェクトのセットから読み込ませることができます。 YはXに適切なデータを表示させるために特別な処理を行う必要はありません。 Yはモデルオブジェクトに変更を加えるだけでよい。次に、Xが再び現れると、そのコントローラーは必要なデータをモデルから再度取り出すことになります。モデルが変更された場合、その変更は当然X(およびY、および同じモデルのデータを表示する他のビュー)に反映されます。

データモデルを持たない場合やモデルがYが変更するデータを保存しない場合に便利な別のアプローチは、XのコントローラにYのコントローラの参照を保持させることです。 XのコントローラーはYのコントローラーを作成している可能性が高いので(XとYの間に親子関係があることを示すので)、XのコントローラーがYのコントローラーへの参照をインスタンス変数またはプロパティーに隠すのは簡単です。それは-viewWillAppearメソッドで、Xのコントローラはそのプロパティをチェックできます。それが無ければ、Yのコントローラーから必要な情報を取得できます。その後、nilにプロパティを設定します:

-(void)viewWillAppear 
{ 
    if (self.ycontroller != nil) { 
     self.person.name = self.ycontroller.name; 
     self.person.address = self.ycontroller.address; 
     self.ycontroller = nil; 
    } 
} 
0

いくつかのオプション

  • があり、子ビューがNSNotificationを投稿しており、親がその通知のオブザーバーも持っている、にデータを渡しますお知らせ。
  • (おそらくプロトコルを宣言することによって)両方のビューが子供に親のメソッドへの参照を与える
  • を参照できるというシングルトンオブジェクトにデータを入れて
1

NeverBeで述べたように、スーパーは(アクセス可能です)、しかし、あなたがビューコントローラにアクセスしたい場合、オブジェクト指向の方法は委任を介してです。したがって、YのビューコントローラのデリゲートプロパティをXのビューコントローラに設定してから、デリゲートを介してメソッドを送信します。非標準メソッドをプロトコルで定義することができます。

Calebに記載されているように、モデルを更新することもできます。どちらの方法も問題ありません。

関連する問題