ContainerViewとSegue
環境 Xcode 8.2.1 Swift 3.0.2
Segueで値を受け渡しするときに受け渡し先にContainerViewが存在し、そのClass内でSegueで渡す値を使用する場合ContainerViewの読み込まれる順番を考慮しないといけません。
読み込まれる順番としては
- Segueのタイミング
- ContainerViewのViewDidLoad
- ViewControllerのViewDidLoad
- ViewControllerのViewWillAppear
- ContainerViewのViewWillAppear
このようになります。私は最初ViewControllerのViewDidLoadが読み込まれると思い、ViewControllerのViewDidLoad内でstaticにした変数にSegueで送られた値を入れ、ContainerViewのViewDidLoadでインスタンス化しその変数を取得する方法を試しました。しかし上記の順番を見れば一目瞭然なように、これではSegueで送られた値が正常にContainerView内で読み込まれません。
解決方法としてViewControllerとContainerViewControllerをつなぐEmbed Segueを利用してViewControllerで受け取った値をContainerViewControllerに受け渡します。言葉にするよりコードを見てもらった方が早いですね。
これでFirstViewController → ViewController → ContainerViewControllerへの値の受け渡しが正常に完了しました。