rootとなるメインページということは
アプリの起動時に最初に表示されるページということでしょうか?
そうであるならば、
手動でrootとなる画面の設定を切り替える方法はいかがでしょうか?
まず、info.plistのMainStoryboardを消します。
次に表示したい画面に対してStoryboard IDを設定します。
(画像では左側のUIViewControllerに設定しています。右のUIViewControllerには”ViewController2”と設定しています。)
アプリ起動時に呼ばれるAppDelegate.swift内の
下記の処理の中でログインしている場合とログインしていない場合で
読み込む画面を切り替えます。
Swift
1
2import UIKit
3
4@UIApplicationMain
5class AppDelegate: UIResponder, UIApplicationDelegate {
6
7 var window: UIWindow?
8
9 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
10
11 // UIWindowインスタンスを初期化します。
12 // 画面のサイズを端末のサイズに合わせます。
13 window = UIWindow(frame: UIScreen.main.bounds)
14
15 // ログインを判定する何かがあるとします。(仮でfalseと設定しています。)
16 // 実際は例えばUserDefaults.standard.bool(forKey: "isLogin")などでログイン状態を保持しておくなど判定をしてください。
17 let isLogin = false
18
19 // UIStoryboardのインスタンスを生成(今回はMain.storyboardから取得しています)
20 let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
21
22 let navigationController = UINavigationController()
23 var viewController: UIViewController
24
25 if isLogin {
26 // UIStoryboardからUIViewControllerのインスタンスを生成します。
27 // withIdentifierにはStoryboard上で設定しているidentifierを設定します。
28 viewController = storyboard.instantiateViewController(withIdentifier: "ViewController2")
29
30 } else {
31 viewController = storyboard.instantiateViewController(withIdentifier: "ViewController1")
32 }
33
34 // navigationControllerにviewControllerを設定します。
35 navigationController.viewControllers = [viewController]
36
37 // UIWindowのrootViewControllerにUINavigationControllerを設定します。
38 window?.rootViewController = navigationController
39
40 // これがないと画面が表示されませんので気をつけてください。
41 window?.makeKeyAndVisible()
42 return true
43 }
44}