Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

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

Beginning iPhone Development with Swift: Exploring the iOS SDK

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

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

今日はここまで。