16
10

More than 3 years have passed since last update.

[Swift]アプリの起動シーンにおける画面遷移(SceneDelegateを用いる)

Last updated at Posted at 2019-12-11

概要

 ios13から新たに”SceneDelegate” というクラスができました。このクラスができる前は、起動時におけるStoryBoard間の画面遷移などはAppDelegateクラスでコードを書いていましたが、iosのアップデートに伴い、アプリ起動時にうまく画面遷移しないという問題が生じました。
 本記事は、SceneDelegateにコードを書いて、起動時の画面遷移を制御させるための記事です。
 (ios13以降を対象にしています)

参考にした記事はこちら

できるようになること

ログインしているときはMain.StoryBoard、会員ではないorログアウトしているときはLogin.StoryBoardに画面遷移することを目標にしています。

コード内容

UserDefaultsで、ログイン状態の有無を記録します。

実際のSceneDelegate内のコード

SceneDelegate
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

        guard let _ = (scene as? UIWindowScene) else { return }



        let ud = UserDefaults.standard
        let isLogin = ud.bool(forKey: "isLogin")
        let window = UIWindow(windowScene: scene as! UIWindowScene)
        if isLogin == true {
            // ログイン中だったら

            let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
            let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootTabBarController")
            self.window?.rootViewController = rootViewController
            self.window?.backgroundColor = UIColor.white
            self.window?.makeKeyAndVisible()

        } else {
            // ログインしていなかったら

            let storyboard = UIStoryboard(name: "Login", bundle: Bundle.main)
            let rootViewController = storyboard.instantiateViewController(withIdentifier: "RootNavigationController")
            self.window?.rootViewController = rootViewController
            self.window?.backgroundColor = UIColor.white
            self.window?.makeKeyAndVisible()
        }


    }
16
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
10