встановити початковий контролер перегляду в appdelegate - швидко


147

Я хотів би встановити початковий контролер перегляду від appdelegate. Я знайшов дійсно гарну відповідь, однак це в «Цілі 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 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
не можна знайти розкадровку "Головна", ані "Storyboard.storyboard" у програмі swift 2
Async-

5
Це поточний стандартний спосіб встановлення початкового контролера перегляду в appdelegate ? Я запитую, тому що це схоже на літтттл-бит хака (вибачте @Abs).
rigdonmr

10
@rigdonmr Якщо у додатку встановлено розділ "Розгортка" як основний інтерфейс, вікно завантажується автоматично і його контролер кореневого перегляду встановлюється на початковий контролер перегляду. Якщо контролер перегляду потрібно змінити на основі умови або у додатку немає головного інтерфейсу, прийнятно ініціалізувати a UIWindowта встановити його кореневий контролер перегляду програмно.
JAL

2
Дивовижна (але гарна) річ у тому, що видача контролера перегляду вручну таким чином, як видається, не дозволяє iOS ініціювати контролер подання за замовчуванням. Я, можливо, очікував завантаження обох. Чи десь зафіксована така поведінка?
Пат Німейер

2
@MayankJain це чудово працює зі Swift 3, просто потрібно перекласти частину коду з попереднього swift
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
}

Дивіться екран моєї розкадровки.


Ви встановили ідентифікатор Storyboard для перегляду контролера в раскадровці? Дивіться joxi.ru/l2ZYxZqS8JOomJ
protikhonoff

Так вже встановлено, я думаю, що це успішно відкриває контролери перегляду, але це не "показує" це. Будь-які ідеї?
Абубакар Моалім

Немає помилок, після запуску екрана я отримую чорну сторінку
Abubakar Moallim

Напевно, я знайшов проблему. Ви повинні встановити прапорець "Чи є початковий контролер перегляду" у вашій дошці. joxi.ru/8AnNbQlhq3QOAO
protikhonoff

але я хочу змінити початковий контролер перегляду за допомогою умовного оператора.
Абубакар Моалім

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як root:

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
на що посилається ім’я ручки?
Абубакар Моалім

@Abs nibName - це ім'я завантаженої ручки, щоб створити подання.
rashii

Анімаційні переходи орієнтації перестають працювати з цим.
користувач3427013

Я вже схвалив цей лол ... "Треба запустити вікно, потім встановити це кадр, треба запустити вікно, потім встановити це кадр, треба вставити у вікно, потім встановити його кадр" -ме для себе
Кріс Алінсон

18

Для нових Xcode 11.xxx та Swift 5.xx, де ціль встановлена ​​на iOS 13+.

Для нової структури проекту AppDelegate не повинен робити нічого щодо rootViewController.

Новий клас є для обробки класу вікон (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
Багато вдячний.
Азим Талукдар

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

Щоб цей приклад працював, ви встановите "MainViewController" як ідентифікатор стовпчиків на головному контролері перегляду, а ім'я файлу розкадровки в цьому випадку буде "MainStoryboard.storyboard". Я перейменовую свої дошки розповідей таким чином, тому що Main.storyboard для мене не є власною назвою, особливо якщо ви коли-небудь переходите до її підкласу.


11

Я зробив це на об'єктивно-с надію, це буде корисним для і

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];

Як ви сконструювали контролери перегляду в раскадровці.
Пунам

перетягніть контролери перегляду та встановіть ідентифікатор розгортки ідентичності: <ViewControllerName> та перейдіть до свого контролера перегляду ...
Patel Jigar

@PatelJigar як встановити в loginvc
Ума Мадхаві

контролер перегляду викликів, подібний до цього UITabBarController * tbc = [self.storyboard instantiateViewControllerWithIdentifier: @ "ContentViewController"]; [self presentViewController: анімований tbc: YES завершення: нуль];
Patel Jigar

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" не має "вікна" члена, будь-яких ідей?
Йосиф Астрахан

@JosephAstrahan оголошує змінну, перш ніж викликати її. Як - var window: UIWindow?.
Джаміль Хаснін Тамім

@JosephAstrahan перевірити мою відповідь ще раз. Я додав змінну.
Джаміль Хаснін Тамім

Дякую, що допомагає тонна!
Йосиф Астрахан

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:

Додайте ці рядки всередину AppDelegate.swift, у межах функції didFinishLaunchingWithOptions () ...

    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
}

Зараз, наприклад, багато разів ми робимо щось подібне, коли хочемо або загнати користувача на екран входу, або на екран початкової настройки, або повернутися на головний екран додатка тощо. Якщо ви теж хочете зробити щось подібне , ви можете використовувати цю точку як розвідку для дороги для цього.

Подумай над цим. Ви можете мати значення, збережене в NSUserDefaults, наприклад, у якому міститься userLoggedIn Boolean таif userLoggedIn == false { use this storyboard & initialViewController... } else { use this storyboard & initialViewController... }


він не працює в новому проекті з доданим 1 ViewController. Завжди починається з початкового контролера перегляду. Xcode 11.2 Де може бути проблема?
Олег Н

5

Добре, що всі відповіді, наведені вище / нижче, створюють попередження про відсутність точки введення в розгортку.

Якщо ви хочете мати 2 (або більше) контролерів перегляду вхідних даних, які залежать від певної умови (скажімо conditionVariable ), тоді вам слід:

  • У вашій Main.storyboard створіть UINavigationController без rootViewController, встановіть його як точку входу
  • Створити 2 (або більше) «Показати» перетікає в контролери переглянути, присвоїти їм деякі ідентифікатор, скажімо id1 і id2
  • Використовуйте наступний код:

    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

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
Coder ACJHP

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 у своєму контролері перегляду та скиньте його об’єкт вікна за допомогою правильного контролера перегляду, оскільки це rootviewController.

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
Працювали ..якщо у вас нету встановити початковий ViewController в stroyboard , то ви повинні додати вікно = UIWindow (кадр: UIScreen.main.bounds)
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 }
    }

Не забудьте додати це до правильного методу сцени, як я це робив тут. Зауважте, що вам потрібно буде встановити ім'я ідентифікатора для вкладкиBarController або viewController, яку ви використовуєте, на дошці розкадрування.

як встановити ідентифікатор розкадровки

У моєму випадку я робив це, щоб встановити 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`

Додати ідентифікатор розгортки

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

    //...
}

Можна встановити кореневий контролер на початковий контролер вікна перегляду window.rootViewController = UIStoryboard (назва: "Main", пакет: 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 від програми.

 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()
        }
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.