appdelegateで初期ビューコントローラーを設定する-迅速


147

appdelegateから初期ビューコントローラーを設定したいと思います。私は本当に良い答えを見つけましたが、それはObjective Cにあり、同じことを迅速に達成するのに問題があります。

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

- (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;
}

誰でも手伝ってくれる?

最初のViewcontrollerが、条件ステートメントを使用して満たされている特定の条件に依存するようにしたい。


これは、の可能重複です:stackoverflow.com/questions/10428629/...
ハニー

回答:


279

私はこのスレッドを使用して、目的CをSwiftに変換し、完全に機能するようにしました。

SwiftでviewControllerをインスタンス化して提示する

Swift 2コード:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    let initialViewController = storyboard.instantiateViewControllerWithIdentifier("LoginSignupVC")

    self.window?.rootViewController = initialViewController
    self.window?.makeKeyAndVisible()

    return true
}

Swift 3コード:

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

    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    let initialViewController = storyboard.instantiateViewController(withIdentifier: "LoginSignupVC")

    self.window?.rootViewController = initialViewController
    self.window?.makeKeyAndVisible()

    return true
}

1
Swift

5
これはappdelegateで初期ビューコントローラ設定する現在の標準的な方法ですかですか?それはちょっとハックのように見えるのでお願いします(申し訳ありませんが@Abs)。
rigdonmr

10
@rigdonmrアプリケーションにストーリーボードがメインインターフェイスとして設定されている場合、ウィンドウは自動的にロードされ、そのルートビューコントローラーはストーリーボードの初期ビューコントローラーに設定されます。条件に基づいてビューコントローラーを変更する必要がある場合、またはアプリケーションにメインインターフェイスがない場合は、を初期化してUIWindow、そのルートビューコントローラーをプログラムで設定することができます。
JAL

2
ここで驚くべき(しかし良い)ことは、この方法でビューコントローラーを手動でインスタンス化すると、iOSがデフォルトのビューコントローラーをインスタンス化しないように見えることです。両方がロードされると思っていたかもしれません。この動作はどこかに文書化されていますか?
Pat Niemeyer 2016

2
@MayankJainこれはSwift 3で正常に動作します。以前の迅速なコードの一部を変換する必要があるだけです
JAB

42

これを試して。例:UINavigationController最初のビューコントローラとして使用する必要があります。次に、ストーリーボードからルートとして任意のビューコントローラーを設定できます。

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    let storyboard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationController:UINavigationController = storyboard.instantiateInitialViewController() as UINavigationController
    let rootViewController:UIViewController = storyboard.instantiateViewControllerWithIdentifier("VC") as UIViewController
    navigationController.viewControllers = [rootViewController]
    self.window?.rootViewController = navigationController
    return true
}

ストーリーボード画面をご覧ください


ストーリーボードでビューコントローラーのストーリーボードIDを設定しましたか?joxi.ru/l2ZYxZqS8JOomJを
protikhonoff

はい、すでに設定されています。ビューコントローラを正常に開くことができたと思いますが、「表示」していません。何か案は?
Abubakar Moallim 2014年

エラーが発生せず、画面の起動後、黒いページが表示される
Abubakar Moallim '05 / 11/11

私は問題を見つけたと思います。ストーリーボードで「Is Initial View Controller」をチェックする必要があります。joxi.ru/8AnNbQlhq3QOAO
プロ

しかし、条件付きステートメントを使用して、最初のビューコントローラーを変更したいと思います。
Abubakar Moallim 2014年

24

Swift 3、Swift 4の場合:

ストーリーボードからルートビューコントローラーをインスタンス化します。

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

        // In project directory storyboard looks like Main.storyboard,
        // you should use only part before ".storyboard" as it's name,
        // so in this example name is "Main".
        let storyboard = UIStoryboard.init(name: "Main", bundle: nil)

        // controller identifier sets up in storyboard utilities
        // panel (on the right), it called Storyboard ID
        let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController

        self.window?.rootViewController = viewController
        self.window?.makeKeyAndVisible()        
        return true
    }

UINavigationControllerルートとして使用したい場合:

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

        let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
        let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController
        let navigationController = UINavigationController.init(rootViewController: viewController)
        self.window?.rootViewController = navigationController

        self.window?.makeKeyAndVisible()        
        return true
    }

xibからルートビューコントローラーをインスタンス化します。

ほぼ同じですが、線の代わりに

let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as! YourViewController

あなたは書く必要があります

let viewController = YourViewController(nibName: "YourViewController", bundle: nil)

22

ストーリーボードを使用していない場合は、これを試すことができます

var window: UIWindow?
var initialViewController :UIViewController?

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

    initialViewController  = MainViewController(nibName:"MainViewController",bundle:nil)

    let frame = UIScreen.mainScreen().bounds
    window = UIWindow(frame: frame)

    window!.rootViewController = initialViewController
    window!.makeKeyAndVisible()

    return true
}

1
ペン先の名前は何を指しますか?
Abubakar Moallim 2014年

@Abs nibNameは、ビューをインスタンス化するためにロードされるnibの名前です。
rashii 14年

これにより、方向転換アニメーションが機能しなくなります。
user3427013

私はすでにこの笑を賛成しました... "ウィンドウを初期化してからフレームを設定し、ウィンドウを初期化してからフレームを設定しなければなりません。ウィンドウを初期化してからフレームを設定しなければなりません" -me to myself
Chris Allinson

18

新しいXcode 11.xxxおよびSwift 5.xxの場合、ターゲットがiOS 13以降に設定されます。

新しいプロジェクト構造では、AppDelegateはrootViewControllerに関して何もする必要がありません。

window(UIWindowScene)クラス-> 'SceneDelegate'ファイルを処理するための新しいクラスがあります。

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?

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

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = // Your RootViewController in here
        self.window = window
        window.makeKeyAndVisible()
    }

}

1
とても感謝しています。
Azim Talukdar

14

これはそれに取り組むための良い方法です。この例では、ナビゲーションコントローラーをルートビューコントローラーとして配置し、選択したビューコントローラーをナビゲーションスタックの一番下に配置して、必要なものをプッシュできるようにします。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
{
    // mainStoryboard
    let mainStoryboard = UIStoryboard(name: "MainStoryboard", bundle: nil)

    // rootViewController
    let rootViewController = mainStoryboard.instantiateViewControllerWithIdentifier("MainViewController") as? UIViewController

    // navigationController
    let navigationController = UINavigationController(rootViewController: rootViewController!)

    navigationController.navigationBarHidden = true // or not, your choice.

    // self.window
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    self.window!.rootViewController = navigationController

    self.window!.makeKeyAndVisible()
}

この例を機能させるには、メインビューコントローラのストーリーボードIDとして「MainViewController」を設定します。この場合のストーリーボードのファイル名は「MainStoryboard.storyboard」になります。Main.storyboardは適切な名前ではないため、ストーリーボードの名前をこのように変更します。特に、サブクラス化する場合はそうです。


11

私はobjective-cでそれをやっていました

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

UIViewController *viewController;

NSUserDefaults *loginUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *check=[loginUserDefaults objectForKey:@"Checklog"];

if ([check isEqualToString:@"login"]) {

    viewController = [storyboard instantiateViewControllerWithIdentifier:@"SWRevealViewController"];
} else {

    viewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
}


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

ストーリーボードでビューコントローラーをどのように設計しましたか?
Poonam

ビューコントローラーをドラッグしてIDのストーリーボードID:<ViewControllerName>を設定し、ビューコントローラーにアクセスします...
Patel

@PatelJigar loginvcでの設定方法
Uma Madhavi

このUITabBarControllerのようなビューコントローラーを呼び出します* tbc = [self.storyboard instantiateViewControllerWithIdentifier:@ "ContentViewController"]; [自己presentViewController:tbcアニメーション:YES完了:nil];
Patel Jigar、2015

7

Swift 4.2および5コードのコード:

var window: UIWindow?


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

     let storyboard = UIStoryboard(name: "Main", bundle: nil)

     let initialViewController = storyboard.instantiateViewController(withIdentifier: "dashboardVC")

     self.window?.rootViewController = initialViewController
     self.window?.makeKeyAndVisible()
}

そしてのためにXcode 11+ and for Swift 5+

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

     var window: UIWindow?

     func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
         if let windowScene = scene as? UIWindowScene {
             let window = UIWindow(windowScene: windowScene)

              window.rootViewController = // Your RootViewController in here

              self.window = window
              window.makeKeyAndVisible()
         }
    }
}

self.windowがエラーを返すタイプ「AppDelegate」の値にメンバー「window」がありません。
ジョセフアストラハン

@JosephAstrahanは、呼び出す前に変数を宣言します。のように- var window: UIWindow?
Jamil Hasnine Tamim

@JosephAstrahanは私の答えをもう一度確認してください。変数を追加しました。
Jamil Hasnine Tamim

ありがとう、それはトンを助けます!
ジョセフアストラハン

And for Xcode 11+ and for Swift 5+一部は私を大いに助けます。おかげで男
トロンゴ

6

私はXcode 8でやっていましたが、Swift 3.0はそれがuにとって有用であり、完全に機能することを願っています。次のコードを使用します。

var window: UIWindow?

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

そして、ナビゲーションコントローラーを使用している場合は、次のコードを使用します。

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationController:UINavigationController = storyboard.instantiateInitialViewController() as! UINavigationController
    let initialViewController = storyboard.instantiateViewControllerWithIdentifier("ViewController")
    navigationController.viewControllers = [initialViewController]
    self.window?.rootViewController = navigationController
    self.window?.makeKeyAndVisible()      
    return true
}

こんにちは... Mayank、私はXcode 8とswift 3.0で実行していました。このソリューションを使用した後、機能しているため、どのエラーが発生します
Kunal

6

スウィフト4:

AppFixLaunchingWithOptions()関数内のAppDelegate.swift内にこれらの行を追加します...

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // Setting the Appropriate initialViewController

    // Set the window to the dimensions of the device
    self.window = UIWindow(frame: UIScreen.main.bounds)

    // Grab a reference to whichever storyboard you have the ViewController within
    let storyboard = UIStoryboard(name: "Name of Storyboard", bundle: nil)

    // Grab a reference to the ViewController you want to show 1st.
    let initialViewController = storyboard.instantiateViewController(withIdentifier: "Name of ViewController")

    // Set that ViewController as the rootViewController
    self.window?.rootViewController = initialViewController

    // Sets our window up in front
    self.window?.makeKeyAndVisible()

    return true
}

たとえば、ユーザーをログイン画面または初期設定画面に移動したり、アプリのmainScreenに戻したりする場合などに、このようなことを何度も行います。そのようなことをしたい場合も、このポイントをそのための分岐点として使用できます。

それについて考えてください。たとえば、NSUserDefaultsに値を格納して、userLoggedInブール値とif userLoggedIn == false { use this storyboard & initialViewController... } else { use this storyboard & initialViewController... }


ViewControllerが1つ追加された新しいプロジェクトでは機能しません。常に最初のView Controllerから開始します。Xcode 11.2どこに問題がありますか?
Oleh H

5

よく上/下のすべての答えは、ストーリーボードにエントリポイントがないという警告を生成しています。

ある条件(たとえばconditionVariable)に依存する2つ(またはそれ以上)のエントリービューコントローラーが必要な場合は、次のようにします。

  • Main.storyboardで、rootViewController なしで UINavigationControllerを作成し、エントリポイントとして設定します。
  • ビューコントローラーに2つ(またはそれ以上)の「表示」セグエを作成し、それらにいくつかのIDを割り当てます(例:id1id2)。
  • 次のコードを使用:

    class AppDelegate: UIResponder, UIApplicationDelegate {
    
       var window: UIWindow?
    
       func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
           let navigationController = window!.rootViewController! as! UINavigationController
           navigationController.performSegueWithIdentifier(conditionVariable ? "id1" : "id2")
    
           return true
       }

お役に立てれば。


1
「ストーリーボードにエントリポイントがありません」エラーは、削除できるプロジェクト構成が原因です。プロジェクト>情報>カスタムiOSターゲットプロパティに移動し、「メインストーリーボードファイルのベース名」プロパティを削除します。警告は表示されなくなります。
Orangemako 2016

5

ストーリーボードを使用していない場合。メインのビューコントローラーをプログラムで初期化できます。

スウィフト4

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    let rootViewController = MainViewController()
    let navigationController = UINavigationController(rootViewController: rootViewController)
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = navigationController
    self.window?.makeKeyAndVisible()

    return true
}
class MainViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .green
    }
}

またMain展開情報からも削除します。

ここに画像の説明を入力してください


これはSwift 4.2、XCode 11.3、IOS
9〜13.3.1

4

これがSwift 4の完全なソリューションであり、didFinishLaunchingWithOptionsでこれを実装します

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

 let isLogin = UserDefaults.standard.bool(forKey: "Islogin")
    if isLogin{
        self.NextViewController(storybordid: "OtherViewController")


    }else{
        self.NextViewController(storybordid: "LoginViewController")

    }
}

Appdelegate.swift内の任意の場所にこの関数を記述します

  func NextViewController(storybordid:String)
{

    let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let exampleVC = storyBoard.instantiateViewController(withIdentifier:storybordid )
   // self.present(exampleVC, animated: true)
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = exampleVC
    self.window?.makeKeyAndVisible()
}

3

アプリデリゲートではなく、ビューコントローラーで実行したい場合に備えて:ビューコントローラーでAppDelegateへの参照をフェッチし、ルートビューコントローラーとして適切なビューコントローラーでウィンドウオブジェクトをリセットします。

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window = UIWindow(frame: UIScreen.mainScreen().bounds)
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let yourVC = mainStoryboard.instantiateViewControllerWithIdentifier("YOUR_VC_IDENTIFIER") as! YourViewController
appDelegate.window?.rootViewController = yourVC
appDelegate.window?.makeKeyAndVisible()

3

以下のための迅速4.0

あなたにAppDelegate.swiftの中のファイルdidfinishedlaunchingWithOptionsの方法は、次のコードを置きます。

var window: UIWindow?


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

    let rootVC = MainViewController() // your custom viewController. You can instantiate using nib too. UIViewController(nib name, bundle)
    //let rootVC = UIViewController(nibName: "MainViewController", bundle: nil) //or MainViewController()
    let navController = UINavigationController(rootViewController: rootVC) // Integrate navigation controller programmatically if you want

    window?.rootViewController = navController

    return true
}

それがうまくいくことを願っています


3
:あなたは、あなたが窓を追加する必要があります= UIWindow(UIScreen.main.boundsフレーム)stroyboardに初期のViewController設定haventは..If勤務
Punit

3

Swift 5およびXcode 11

したがって、xCode 11では、ウィンドウソリューションはappDelegate内では無効になりました。彼らはこれをSceneDelgateに移動しました。これは、SceneDelgate.swiftファイルにあります。

あなたはそれが今var window: UIWindow?プレゼントを持っていることに気づくでしょう。

私の状況では、ストーリーボードからTabBarControllerを使用していて、それをrootViewControllerとして設定したいと考えていました。

これは私のコードです:

sceneDelegate.swift

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).

        self.window = self.window ?? UIWindow()//@JA- If this scene's self.window is nil then set a new UIWindow object to it.

        //@Grab the storyboard and ensure that the tab bar controller is reinstantiated with the details below.
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let tabBarController = storyboard.instantiateViewController(withIdentifier: "tabBarController") as! UITabBarController

        for child in tabBarController.viewControllers ?? [] {
            if let top = child as? StateControllerProtocol {
                print("State Controller Passed To:")
                print(child.title!)
                top.setState(state: stateController)
            }
        }

        self.window!.rootViewController = tabBarController //Set the rootViewController to our modified version with the StateController instances
        self.window!.makeKeyAndVisible()

        print("Finished scene setting code")
        guard let _ = (scene as? UIWindowScene) else { return }
    }

ここで行ったように、これを正しいシーンメソッドに必ず追加してください。ストーリーボードで使用しているtabBarControllerまたはviewControllerの識別子名を設定する必要があることに注意してください。

ストーリーボードIDの設定方法

私の場合、これを実行して、stateControllerを設定して、タブビュー間の共有変数を追跡しました。これと同じことをしたい場合は、次のコードを追加してください...

StateController.swift

import Foundation

struct tdfvars{
    var rbe:Double = 1.4
    var t1half:Double = 1.5
    var alphaBetaLate:Double = 3.0
    var alphaBetaAcute:Double = 10.0
    var totalDose:Double = 6000.00
    var dosePerFraction:Double = 200.0
    var numOfFractions:Double = 30
    var totalTime:Double = 168
    var ldrDose:Double = 8500.0
}

//@JA - Protocol that view controllers should have that defines that it should have a function to setState
protocol StateControllerProtocol {
  func setState(state: StateController)
}

class StateController {
    var tdfvariables:tdfvars = tdfvars()
}

注:代わりに、独自の変数または追跡しようとしているものを使用してください。tdfvariables構造体の例として、ここにリストしました。

TabControllerの各ビューで、次のメンバー変数を追加します。

    class SettingsViewController: UIViewController {
    var stateController: StateController?
.... }

次に、それらの同じファイルに以下を追加します。

extension SettingsViewController: StateControllerProtocol {
  func setState(state: StateController) {
    self.stateController = state
  }
}

これにより、ビュー間で変数を渡すシングルトンアプローチ回避できます。これにより、シングルトンアプローチよりも長期的に優れた依存性注入モデルを簡単に実現できます。


3

無効にする Main.storyboard

General -> Deployment Info -> Main Interface -> remove `Main` 
Info.plist -> remove Key/Value for `UISceneStoryboardFile` and  `UIMainStoryboardFile`

ストーリーボードIDを追加

Main.storyboard -> Select View Controller -> Inspectors -> Identity inspector -> Storyboard ID -> e.g. customVCStoryboardId

Swift 5およびXcode 11

伸ばす UIWindow

class CustomWindow : UIWindow {
    //...
}

Xcodeによって生成された編集 SceneDelegate.swift

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: CustomWindow!

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

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

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = storyboard.instantiateViewController(withIdentifier: "customVCStoryboardId")

        window = CustomWindow(windowScene: windowScene)
        window.rootViewController = initialViewController
        window.makeKeyAndVisible()
    }

    //...
}

ルートコントローラーを初期ビューコントローラーウィンドウに設定できます。rootViewController= UIStoryboard(name: "Main"、bundle:nil).instantiateInitialViewController()
Kamran Khan

1
I worked out a solution on Xcode 6.4 in swift. 

// I saved the credentials on a click event to phone memory

    @IBAction func gotobidderpage(sender: AnyObject) {
 if (usernamestring == "bidder" && passwordstring == "day303")
        {
            rolltype = "1"

NSUserDefaults.standardUserDefaults().setObject(usernamestring, forKey: "username")
NSUserDefaults.standardUserDefaults().setObject(passwordstring, forKey: "password")
NSUserDefaults.standardUserDefaults().setObject(rolltype, forKey: "roll")


            self.performSegueWithIdentifier("seguetobidderpage", sender: self)
}


// Retained saved credentials in app delegate.swift and performed navigation after condition check


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

let usernamestring = NSUserDefaults.standardUserDefaults().stringForKey("username")
let passwordstring = NSUserDefaults.standardUserDefaults().stringForKey("password")
let rolltypestring = NSUserDefaults.standardUserDefaults().stringForKey("roll")

        if (usernamestring == "bidder" && passwordstring == "day303" && rolltypestring == "1")
        {

            // Access the storyboard and fetch an instance of the view controller
            var storyboard = UIStoryboard(name: "Main", bundle: nil)
            var viewController: BidderPage = storyboard.instantiateViewControllerWithIdentifier("bidderpageID") as! BidderPage

            // Then push that view controller onto the navigation stack
            var rootViewController = self.window!.rootViewController as! UINavigationController
            rootViewController.pushViewController(viewController, animated: true)
        }

        // Override point for customization after application launch.
        return true
    }



Hope it helps !

1
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
}

1

SWRevealViewController From App delegateでビューコントローラーを開きます。

 self.window = UIWindow(frame: UIScreen.main.bounds)
 let storyboard = UIStoryboard(name: "StoryboardName", bundle: nil)
 let swrevealviewcontroller:SWRevealViewController = storyboard.instantiateInitialViewController() as! SWRevealViewController 
 self.window?.rootViewController = swrevealviewcontroller
 self.window?.makeKeyAndVisible()

0

Swift 5以降の場合


var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            let submodules = (
                home: HomeRouter.createModule(),
                search: SearchRouter.createModule(),
                exoplanets: ExoplanetsRouter.createModule()
            )
            
            let tabBarController = TabBarModuleBuilder.build(usingSubmodules: submodules)
            
            window.rootViewController = tabBarController
            self.window = window
            window.makeKeyAndVisible()
        }
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.