Swiftで遊ぼう! - 311 - My Fourth Project switchViewController()
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena
Beginning iPhone Development with Swift: Exploring the iOS SDK
- 作者: David Mark,Jack Nutting,Kim Topley,Fredrik Olsson,Jeff LaMarche
- 出版社/メーカー: Apress
- 発売日: 2014/11/19
- メディア: Kindle版
- この商品を含むブログを見る
SwitchingViewControllerのラストのコーディングは、switchViewController()メソッドです。
private func switchViewController(from fromVC:UIViewController?, to toVC:UIViewController?) { if let fvc = fromVC { fvc.willMoveToParentViewController(nil) fvc.view.removeFromSuperview() fvc.removeFromParentViewController() } if let tvc = toVC { self.addChildViewController(tvc) self.view.insertSubview(tvc.view, atIndex: 0) tvc.didMoveToParentViewController(self) } }
このメソッドには2つの機能が組み込まれています。既存のViewControllerを消して、新しいViewControllerに画面を制御させます。
先ず、2番目のブロックから見ていきます。
「if let tvc = toVC」は、もともとオリジナルで「if toVC != nil」と書かれていました。しかし、Swiftらしい記述法に変えたんです。
self.addChildViewController(tvc)
新しいViewControllerをSwitchingViewControlle(self)rの子(child)として組み込みます。このように他のViewControllerを管理するコントローラー(SwitchingViewController)のことをコンテナ・ビュー・コントローラーと呼びます。実はiOS APIにも同様のビューコントローラーが用意されています。UITabBarControllerとUINavigationControllerです。switchViewController(from:, to:)と似たようなメソッドを持っています。
self.view.insertSubview(tvc.view, atIndex: 0)
次にchild ViewControllerのViewをSwitchingViewConrollerが持っているView階層の1番後ろ(atIndex: 0)に組み込みます。こうすることでツールバーが消えません。
tvc.didMoveToParentViewController(self)
これでchild viewControllerのメソッドが動くようになります。
上段のコードブロックは比較的理解しやすく。既存のビューコントローラーを消していくステップです。まずビューコントローラーを親ビューコントローラーから外して、そのビューを消して、最後にビューコントローラーを消してしまうということです。
これでSwitchingViewControllerのコーディングはすべて終了です。
でも、ラン(Cmd + R)はしないでください。エラーが出ます。
まだコンテンツ・ビュー・コントローラーのコーディングが終わってないからです。
今日はここまで。