Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena

Beginning iPhone Development with Swift: Exploring the iOS SDK

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)はしないでください。エラーが出ます。

まだコンテンツ・ビュー・コントローラーのコーディングが終わってないからです。

今日はここまで。