メモ

プログラミングなどの備忘録を書きます

iosアプリの起動時の画面をコントロールする

ログイン状態など条件に応じてrootViewControllerを切り替えたかった。 ちょっと調べたところUIWindowのrootViewControllerを設定すれば良いらしい。

var window: UIWindow?

let storyboard = UIStoryboard(name: "Main", bundle: nil)
if (flag) {
  let mainViewController = storyboard.instantiateViewControllerWithIdentifier("MainViewController")
  let navigationController = UINavigationController(rootViewController: mainViewController)
  self.window!.rootViewController = navigationController
} else {
  let loginViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController")
  let navigationController = UINavigationController(rootViewController: loginViewController)
  self.window!.rootViewController = navigationController
}

しかし、このようにすると最初のviewが表示される前に一瞬真っ暗な画面が表示されてしまった。
原因はデフォルトのrootViewControllerが設定されておらず、上記のコードの実行前に未設定のrootViewControllerを表示しようとしているためだった。 ひとまずlaunch中に表示するviewを作りデフォルトのrootViewControllerとして設定することで見かけ上は解決した。

launch前にrootViewControllerを設定する方法があればそれを使いたいが、ググっても見つからなかった。 より良い方法が見つかったら追記したい。