ストーリーボードを使用してプログラムで初期ビューコントローラーを設定する


252

InitialViewControllerストーリーボードのをプログラムで設定するにはどうすればよいですか?起動ごとに異なる可能性があるいくつかの条件に応じて、ストーリーボードを別のビューで開きます。


1
設定でメインストーリーボードをクリアせずに、警告なしにこの回答を確認してください。
Borzh 2016年

回答:


466

ダミーの初期ビューコントローラーを使用しない方法

すべての初期View ControllerにストーリーボードIDがあることを確認します。

ストーリーボードで、最初のビューコントローラの[Is initial View Controller]属性をオフにします。

この時点でアプリを実行すると、次のようになります。

Failed to instantiate the default view controller for UIMainStoryboardFile 'MainStoryboard' - perhaps the designated entry point is not set?

また、アプリデリゲートのウィンドウプロパティがnilになっていることがわかります。

アプリの設定で、ターゲットとInfoタブに移動します。の値をクリアしますMain storyboard file base name。上のGeneralタブに値をクリアしますMain Interface。これにより警告が削除されます。

アプリデリゲートのapplication:didFinishLaunchingWithOptions:メソッドでウィンドウと必要な初期ビューコントローラーを作成します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

    UIViewController *viewController = // determine the initial view controller here and instantiate it with [storyboard instantiateViewControllerWithIdentifier:<storyboard id>];

    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

7
愛!愛!愛!これを使用して、IOS6とIOS7の2つの完全に異なるビューコントローラーツリーを切り替えます。IOS7ですべての標準機能を使用しながら、後方互換性を処理する最良の方法のようです。
Hunkpapa 2013

6
私はSwiftでiOSプログラミングを学んでいます。上記のコードをすばやく書く方法を誰かが手伝ってくれる?助けてください。ありがとう。
Raghavendra 2014

1
@bdv didFinishLaunchingWithOptionsは、アプリが新しいプロセスで開始されたときに呼び出されます。ホーム画面に移動してアプリに戻った場合、このメソッドは再度呼び出されません。(メモリの制約によりiOSが終了しない限り。)アプリを停止して、IDEからもう一度起動してみてください。問題が解決しない場合は、問題をSOに投稿してください。
Travis

2
@peyman私の調査によると、メインのストーリーボードへの参照が削除されると、ウィンドウは存在しなくなります。私は現在のプロジェクトでウィンドウのインスタンス化をコメントアウトしましたが、これはまだ事実であることがわかりました。
Travis

2
@Raghav、これが迅速なコードです:self.window = UIWindow(frame: UIScreen.mainScreen().bounds) var storyboard = UIStoryboard(name: "Main", bundle: nil) var viewController: UIViewController = // self.window!.rootViewController = viewController self.window!.makeKeyAndVisible()
mjmayank

121

世界中のSwift愛好家のために、ここにSWIFTに翻訳された@Travisによる回答があります:

Objective Cコードの前に@Travisが説明したことを行います。そして、

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    var exampleViewController: ExampleViewController = mainStoryboard.instantiateViewControllerWithIdentifier("ExampleController") as! ExampleViewController

    self.window?.rootViewController = exampleViewController

    self.window?.makeKeyAndVisible()

    return true
}

これExampleViewControllerは、表示する新しい初期ビューコントローラです。

説明した手順:

  1. 現在のウィンドウのサイズで新しいウィンドウを作成し、それをメインウィンドウとして設定します
  2. 新しい初期ビューコントローラの作成に使用できるストーリーボードをインスタンス化します
  3. ストーリーボードIDに基づいて新しい初期ビューコントローラをインスタンス化します
  4. 新しいウィンドウのルートビューコントローラーを、開始したばかりの新しいコントローラーとして設定します。
  5. 新しいウィンドウを表示する

楽しんで幸せなプログラミングを!


@Travisにこのバージョンを尋ねたところ、... とにかくありがとう。
dellos、2015

Storyboard IDは、IdentityインスペクターペインのIdentityセクションの下にあります
Dominic

2
ストーリーボードIDを必要としないヒントは、ストーリーボードの初期ビューコントローラー(rootViewController)を明示的に設定し、インスタンスメソッドUIStoryboard.instantiateInitialViewController()を使用して、上記のUIStoryboard.instantiateViewControllerWithIdentifier()の代わりにコントローラーを取得することです。残りは同じです。
Eric Boumendil、2016年

45

プログラムでキーウィンドウのrootViewControllerを設定できます。 (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

例えば:

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (shouldShowAnotherViewControllerAsRoot) {
        UIStoryboard *storyboard = self.window.rootViewController.storyboard;
        UIViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"rootNavigationController"];
        self.window.rootViewController = rootViewController;
        [self.window makeKeyAndVisible];
    }

    return YES;
}

次に、セカンダリUIViewControllerから元のエントリポイントを開始する方法は?
ooxio

@ooxio:元のエントリポイントをグローバルな場所に保存して、後で使用できます。
Chengjiong 2015

これは、ログイン/登録などのインスタンスを作成したい場合に非常に役立ちます...
Honey

これは、@ Travisの上記の回答よりもはるかに簡単です。何百万ものプロジェクト設定をいじったり、IBをいじったりする必要がないためです。ビューコントローラーの1つが技術的にデフォルトの初期VCであり、プログラムで別のVCに転送するかどうかは誰が気にしますか?
ダニー

置き換えられた、ストーリーボードで指定された最初のView Controllerは引き続きインスタンス化され、init()/ deinit()サイクルを通過しますが、-s を実行viewDidLoad()または適切に初期化しないことに注意してくださいIBOutlet。コードが準備ができていることを確認してください。
ゲイリー

14

Swift 3: @ victor-siglerのコードの更新

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)

    // Assuming your storyboard is named "Main"
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    // Add code here (e.g. if/else) to determine which view controller class (chooseViewControllerA or chooseViewControllerB) and storyboard ID (chooseStoryboardA or chooseStoryboardB) to send the user to

    if(condition){
        let initialViewController: chooseViewControllerA = mainStoryboard.instantiateViewController(withIdentifier: "chooseStoryboardA") as! chooseViewControllerA
        self.window?.rootViewController = initialViewController
    )
    }else{
        let initialViewController: chooseViewControllerB = mainStoryboard.instantiateViewController(withIdentifier: "chooseStoryboardB") as! chooseViewControllerB
        self.window?.rootViewController = initialViewController
    )

    self.window?.makeKeyAndVisible(

    return true
}

@MEKさん、ありがとうございます。また、末尾の括弧を中括弧に置き換えることにより、条件付き終了ステートメントの構文を修正することもできます。
Native_Mobile_Arch_Dev

9

ナビゲーションrootviewcontrollerをメインビューコントローラとして設定できます。このアイデアは、アプリケーション要件に従って自動ログインに使用できます。

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

UIViewController viewController = (HomeController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"HomeController"];

UINavigationController navController = [[UINavigationController alloc] initWithRootViewController:viewController];

 self.window.rootViewController = navController;

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {

    // do stuff for iOS 7 and newer

    navController.navigationBar.barTintColor = [UIColor colorWithRed:88/255.0 green:164/255.0 blue:73/255.0 alpha:1.0];

    navController.navigationItem.leftBarButtonItem.tintColor = [UIColor colorWithRed:88/255.0 green:164/255.0 blue:73/255.0 alpha:1.0];

    navController.navigationBar.tintColor = [UIColor whiteColor];

    navController.navigationItem.titleView.tintColor = [UIColor whiteColor];

    NSDictionary *titleAttributes =@{

                                     NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0],

                                     NSForegroundColorAttributeName : [UIColor whiteColor]

                                     };

    navController.navigationBar.titleTextAttributes = titleAttributes;

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

}

else {

    // do stuff for older versions than iOS 7

    navController.navigationBar.tintColor = [UIColor colorWithRed:88/255.0 green:164/255.0 blue:73/255.0 alpha:1.0];



    navController.navigationItem.titleView.tintColor = [UIColor whiteColor];

}

[self.window makeKeyAndVisible];

StoryboardSegueユーザー向け

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];

// Go to Login Screen of story board with Identifier name : LoginViewController_Identifier

LoginViewController *loginViewController = (LoginViewController*)[mainStoryboard instantiateViewControllerWithIdentifier:@“LoginViewController_Identifier”];

navigationController = [[UINavigationController alloc] initWithRootViewController:testViewController];

self.window.rootViewController = navigationController;

[self.window makeKeyAndVisible];

// Go To Main screen if you are already Logged In Just check your saving credential here

if([SavedpreferenceForLogin] > 0){
    [loginViewController performSegueWithIdentifier:@"mainview_action" sender:nil];
}

ありがとう


6

メインストーリーボードを開き、最初に開始するビューを選択してから、[ユーティリティ]-> [属性]を開きます。「View Controller」の下に、「Is initial View Controller」ラジオボタンがあります。選択してください。

---改訂された質問へ:

これを試すことができます:最初のビューのViewDidLoadセクションにメソッドを記述し、メソッドがアプリケーションの起動時に実行されると、メソッドは別のビューへのセグエをトリガーします。


ViewDidLoadでメソッドを記述しましたが、機能しませんでした。viewdidAppearでメソッドをライトすると、機能しているので、なぜこれが起こっているのか説明できますか。
UserDev 2012年

これを試してみてください:appDelegate.mファイルの適切なメソッドの1つに、状況に応じてセグエコードを追加します。たとえば、「applicationDidBecomeActive:」メソッドにセグエコードを追加できます。
m.etka

@Jagdevでは、ViewDidLoadではなくViewDidAppearで記述します。
Umair Khan Jadoon 2012

このアプローチの問題は、最初のビューコントローラーがしばらくの間表示された後、UXの観点からは適切でない別のビューコントローラーに切り替わるため、適切な解決策ではありません。
vishal dharankar 2014

3

SWIFT 5

ストーリーボードの最初のViewControllerとしてViewControllerを設定していない場合は、次の2つのことを行う必要があります。

  1. プロジェクトTARGETSに移動し、プロジェクト-> General-> Clear the Main Interfaceフィールドを選択します。
  2. 常にプロジェクトTARGETS内で、情報->アプリケーションシーンマニフェスト->シーン構成->アプリケーションセッションロール-> Item0(デフォルト構成)->ストーリーボード名フィールドを削除します。

最後に、SceneDelegateにコードを追加できます。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let windowScene = (scene as? UIWindowScene) else { return }

    window = UIWindow(windowScene: windowScene)


    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    // Make sure you set an Storyboard ID for the view controller you want to instantiate
    window?.rootViewController = storyboard.instantiateViewController(withIdentifier: identifier)
    window?.makeKeyAndVisible()

}

これは確かにXcode 11.5の時点での最新の回答でありFailed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set、コードで最初のVCをインスタンス化することを決定した後に出された警告を実際に修正しました。重要な点は、@ rs7が「ストーリーボード名フィールドを削除する」と言う場合、フィールド自体の内容だけでなく、plistの行全体を意味します。
cdf1982

2

それは可能ではないと思います。代わりに、異なるビューコントローラーにセグエを持つ1つの初期コントローラーを持つことができます。起動時に、プログラムで実行するセグエを決定できます。


2

initial view controllerInterface Builderを使用して設定することも、プログラムで設定することもできます。

以下は、プログラムで使用されるアプローチです。

Objective-C:

        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

        UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; // <storyboard id>

        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];

        return YES;

スウィフト:

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        var objMainViewController: MainViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainController") as! MainViewController

        self.window?.rootViewController = objMainViewController

        self.window?.makeKeyAndVisible()

        return true

2

ダイナミックナビゲーションを処理し、クリーンなAppDelegateクラスを維持するためのルーティングクラスを作成しました。それが他にも役立つことを願っています。

//
//  Routing.swift
// 
//
//  Created by Varun Naharia on 02/02/17.
//  Copyright © 2017 TechNaharia. All rights reserved.
//

import Foundation
import UIKit
import CoreLocation

class Routing {

    class func decideInitialViewController(window:UIWindow){
        let userDefaults = UserDefaults.standard
        if((Routing.getUserDefault("isFirstRun")) == nil)
        {
            Routing.setAnimatedAsInitialViewContoller(window: window)
        }
        else if((userDefaults.object(forKey: "User")) != nil)
        {
            Routing.setHomeAsInitialViewContoller(window: window)
        }
        else
        {
            Routing.setLoginAsInitialViewContoller(window: window)
        }

    }

    class func setAnimatedAsInitialViewContoller(window:UIWindow) {
        Routing.setUserDefault("Yes", KeyToSave: "isFirstRun")
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let animatedViewController: AnimatedViewController = mainStoryboard.instantiateViewController(withIdentifier: "AnimatedViewController") as! AnimatedViewController

        window.rootViewController = animatedViewController
        window.makeKeyAndVisible()
    }

    class func setHomeAsInitialViewContoller(window:UIWindow) {
        let userDefaults = UserDefaults.standard
        let decoded  = userDefaults.object(forKey: "User") as! Data
        User.currentUser = NSKeyedUnarchiver.unarchiveObject(with: decoded) as! User

        if(User.currentUser.userId != nil && User.currentUser.userId != "")
        {
            let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let homeViewController: HomeViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
            let loginViewController: UINavigationController = mainStoryboard.instantiateViewController(withIdentifier: "LoginNavigationViewController") as! UINavigationController
            loginViewController.viewControllers.append(homeViewController)
            window.rootViewController = loginViewController
        }
        window.makeKeyAndVisible()
    }

    class func setLoginAsInitialViewContoller(window:UIWindow) {
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let loginViewController: UINavigationController = mainStoryboard.instantiateViewController(withIdentifier: "LoginNavigationViewController") as! UINavigationController

        window.rootViewController = loginViewController
        window.makeKeyAndVisible()
    }

  class func setUserDefault(_ ObjectToSave : Any?  , KeyToSave : String)
    {
        let defaults = UserDefaults.standard

        if (ObjectToSave != nil)
        {

            defaults.set(ObjectToSave, forKey: KeyToSave)
        }

        UserDefaults.standard.synchronize()
    }

    class func getUserDefault(_ KeyToReturnValye : String) -> Any?
    {
        let defaults = UserDefaults.standard

        if let name = defaults.value(forKey: KeyToReturnValye)
        {
            return name as Any
        }
        return nil
    }

    class func removetUserDefault(_ KeyToRemove : String)
    {
        let defaults = UserDefaults.standard
        defaults.removeObject(forKey: KeyToRemove)
        UserDefaults.standard.synchronize()
    }

}

そしてあなたのAppDelegateでこれを呼び出します

 self.window = UIWindow(frame: UIScreen.main.bounds)
 Routing.decideInitialViewController(window: self.window!)

2

フォースキャスティングを回避してSwift 3Swift 4を使用する別の解決策は次のとおりです

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewController") as? YourViewController else {
        return false
    }
    self.window?.rootViewController = viewController
    self.window?.makeKeyAndVisible()
    return true
}

そして以下はで使用しています UINavigationController

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    guard let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewController") as? YourViewController else {
        return false
    }
    let navigationController = UINavigationController(rootViewController: viewController)
    self.window?.rootViewController = navigationController
    self.window?.makeKeyAndVisible()
    return true
}

2

ではAppDelegate.swift、あなた次のコードを追加することができます。

let sb = UIStoryboard(name: "Main", bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: "YourViewController_StorboardID")
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()

もちろん、適切なビューコントローラーを選択する基準に基づいて、ロジックを実装する必要があります。

また、IDを追加することを忘れないでください(ストーリーボード->コントローラーシーン-> IDインスペクターの表示-> StorboardIDを選択)。


1

iOS 13およびシーンデリゲートの更新された回答:

info.plistファイルで、アプリケーションシーンマニフェスト->シーン構成->アプリケーションセッションロール->アイテム0に移動し、メインストーリーボードへの参照も削除してください。それ以外の場合は、ストーリーボードからのインスタンス化の失敗に関する同じ警告が表示されます。

また、アプリデリゲートからシーンデリゲートメソッドscene(_:willConnectTo:options :)にコードを移動します。これは、ここでライフサイクルイベントが処理されるためです。


0

数日前、私は同じ状況に遭遇しました。非常に単純なトリックがこの問題を解決しました。Launch2の前に、最初のView Controllerを非表示に設定しました。最初のビューコントローラーが適切なコントローラーである場合、viewDidLoadでvisibleに設定されます。それ以外の場合は、目的のビューコントローラにセグエを実行します。iOS 6.1以降で完全に動作します。私はそれが以前のバージョンのiOSで動作すると確信しています。


0

AppDelegateでこれを次のように変更していただきありがとうございます。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) ->     Bool {
//Some code to check value of pins

if pins! == "Verified"{
        print(pins)
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "HomePage", bundle: nil)
        let exampleViewController: UINavigationController = mainStoryboard.instantiateViewControllerWithIdentifier("SBHP") as! UINavigationController

        self.window?.rootViewController = exampleViewController

        self.window?.makeKeyAndVisible()
    }else{
        print(pins)
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let exampleViewController: UINavigationController = mainStoryboard.instantiateViewControllerWithIdentifier("SBUser") as! UINavigationController

        self.window?.rootViewController = exampleViewController

        self.window?.makeKeyAndVisible()
    }

0

シンプルなソリューションが見つかりました-ストーリーボードから "初期ビューコントローラーチェック"を削除してプロジェクトの[情報]タブを編集する必要makeKeyAndVisibleはなく、配置するだけです

self.window.rootViewController = rootVC;

- (BOOL) application:didFinishLaunchingWithOptions:

しかし、あなたはまだ取得rootVCからinstantiateViewControllerWithIdentifier、正しいですか?
thomers

0
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = mainStoryboard.instantiateViewController(withIdentifier: "storyBoardid") as! ViewController
let navigationController = UINavigationController(rootViewController: vc)
UIApplication.shared.delegate.window?.rootViewController = navigationController

もう1つの方法は、viewControllerを提示することです。

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = mainStoryboard.instantiateViewController(withIdentifier: "storyBoardid") as! ViewController
self.present(vc,animated:true,completion:nil)

最初にストーリーボードのオブジェクトを作成し、次にルートを変更する必要があります(必要な場合)次に、現在のビューコントローラー(ルートを変更した場合)がプッシュされている特定のビューコントローラーの参照を取得します。それ以外の場合は、新しいビューコントローラーが表示されます


@VD Purohit、理解を深めるために回答について詳しく説明してください。
Prags、

0

Swift 4、Xcode 9

ファイルAppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let firstVC = storyboard.instantiateViewController(withIdentifier: "firstViewController") as! firstViewController
    self.window?.rootViewController = firstVC
}

0
 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        self.window = UIWindow(frame: UIScreen.main.bounds)
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        if (PreferenceHelper.getAccessToken() != "") {
            let initialViewController = storyboard.instantiateViewController(withIdentifier: "your View Controller Identifier")
            self.window?.rootViewController = initialViewController
        } else {
            let initialViewController = storyboard.instantiateViewController(withIdentifier: "your View Controller identifier")
            self.window?.rootViewController = initialViewController
        }
        self.window?.makeKeyAndVisible()
        return true
    }

/*
use your view Controller identifier must use it doubles quotes**strong text**

nsuserデフォルト値プリファレンス値のチェック完全に保存され、初期ビューで条件をチェックしていますコントローラの問題
charles

0

Swift 5以上#このシンプルなコードでルートビューコントローラーを作成します。xcode 11以降を使用している場合は、最初var window: UIWindow?にAppDelegateで初期化します

let rootVC = mainStoryboard.instantiateViewController(withIdentifier: "YOURCONTROLLER") as! YOURCONTROLLER

        navigationController.setNavigationBarHidden(true, animated: true)
        UIApplication.shared.windows.first?.rootViewController = UINavigationController.init(rootViewController: rootVC)
        UIApplication.shared.windows.first?.makeKeyAndVisible()

0

applicationDidFinishを変更したくない場合は、次のトリックを実行できます。

ナビゲーションコントローラーを初期ビューコントローラーとして設定し、カスタムクラス 'MyNavigationController'を割り当てます。次に、viewDidLoad中にルートビューコントローラーを微調整できます。ストーリーボードで設定したルートビューコントローラーをオーバーライドします。

class MyNavigationController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
        if !isLoggedIn() {
            viewControllers = [R.storyboard.authentication.loginView()!]
        }
    }

    private func isLoggedIn() -> Bool {
        return false
    }

}

-3

最初に開きたいビューコントローラを選択し、属性インスペクタに移動します。最初のシーンに移動し、チェックは最初のビューコントローラーオプションです。

これが、アプリケーションの起動時に最初に開く最初のビューコントローラになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.