ビギグラマーのノート

自作PCやプログラミングについてのブログです。

ContainerViewとSegue

環境 Xcode 8.2.1 Swift 3.0.2

 Segueで値を受け渡しするときに受け渡し先にContainerViewが存在し、そのClass内でSegueで渡す値を使用する場合ContainerViewの読み込まれる順番を考慮しないといけません。

f:id:BegiGrammer:20170209133707p:plain

  読み込まれる順番としては

  1. Segueのタイミング
  2. ContainerViewのViewDidLoad
  3. ViewControllerのViewDidLoad
  4. ViewControllerのViewWillAppear
  5. ContainerViewのViewWillAppear

 このようになります。私は最初ViewControllerのViewDidLoadが読み込まれると思い、ViewControllerのViewDidLoad内でstaticにした変数にSegueで送られた値を入れ、ContainerViewのViewDidLoadでインスタンス化しその変数を取得する方法を試しました。しかし上記の順番を見れば一目瞭然なように、これではSegueで送られた値が正常にContainerView内で読み込まれません。

 解決方法としてViewControllerとContainerViewControllerをつなぐEmbed Segueを利用してViewControllerで受け取った値をContainerViewControllerに受け渡します。言葉にするよりコードを見てもらった方が早いですね。

f:id:BegiGrammer:20170209141720p:plain

 これでFirstViewController → ViewController → ContainerViewControllerへの値の受け渡しが正常に完了しました。