概要
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()
}
}