2017-09-28 9 views
-1

iOSの典型的なセグでは、表示コントローラABにセグメントし、をAに上書きして、一部のデータをBに渡します。セグを準備する際、どのように子のUIViewControllerにデータを渡すのですか?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let b = segue.destination as! ViewControllerB 
    b.someData = ... 

しかしBが埋め込まれた子ビューコントローラを持っているならば、それはこの時点では、まだロードされません。埋め込み子ビューコントローラにデータを渡すための推奨される方法はありますか?

ViewControllerBにフィールドを定義してから、それを子に渡してviewDidLoadメソッドに渡すことができます。 (その時点で、子ビューコントローラで、BのchildViewControllers配列に入っています)。しかし、これは私にとってはちょっと醜いようです。

+0

何の準備? – the4kman

+0

A-> B-> Cがあり、A-> Cのデータを渡す必要がある場合はBに設定し、Bの場合はCに設定することもできます –

答えて

0

OOPの原則、特に「抽象化」に従うこと。 ViewControllerAは、ViewControllerBがどのようにジョブを実行するかについて何も知ってはいけません。 ViewControllerBがそれ自身のコントロールをロードする場合、ViewControllerBのビジネスです。 ViewControllerAの仕事は、ViewControllerBにジョブを実行するために必要なすべてを提供することです。 ええ、私はviewDidLoadイベントを使用してchildViewControllerをロードします。

0

あなたはビューコントローラBのメソッドを持つことができ、例えば

public configureChildVC(data: Any) { 
// in here set data to child vc 
} 

し、その後で孫とデリゲートと祖父母との間に直接的なコミュニケーションについてセグエ

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let b = segue.destination as! ViewControllerB 
    b.configureChildVC(data: whatever) 
} 
関連する問題