108 votes

Comment créer un nouveau projet Swift sans utiliser Storyboards?

La création d'un nouveau projet dans XCode 6 ne permet pas de désactiver les storyboards. Vous pouvez uniquement sélectionner Swift ou Objective-C et utiliser ou non les données de base.

J'ai essayé de supprimer le storyboard et du projet en supprimant le storyboard principal et en réglant manuellement la fenêtre depuis didFinishLaunching

Dans l'AppDelegate, j'ai ceci:

 class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow
var testNavigationController: UINavigationController

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {

        testNavigationController = UINavigationController()
        var testViewController: UIViewController = UIViewController()
        self.testNavigationController.pushViewController(testViewController, animated: false)

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

        self.window.rootViewController = testNavigationController

        self.window.backgroundColor = UIColor.whiteColor()

        self.window.makeKeyAndVisible()

        return true
    }
}
 

Cependant, XCode me donne une erreur:

La classe 'AppDelegate' n'a pas d'initialiseurs

Quelqu'un a réussi dans cela?

91voto

duemunk Points 340

Tout ce qu'il faut pour ne pas utiliser des story-boards pour l' rootViewController:

1· Variation AppDelegate.swift :

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        if let window = window {
            window.backgroundColor = UIColor.whiteColor()
            window.makeKeyAndVisible()
            window.rootViewController = ViewController()
        }
        return true
    }
}

2· Créer un ViewController sous-classe de la UIViewController:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.blueColor()
    }
}

3· Si vous avez créé le projet à partir d'un Xcode modèle:

  1. Supprimer la paire clé-valeur pour la clé "Main storyboard file base name" de Info.plist.
  2. Supprimer la table de montage séquentiel du fichier Main.storyboard.

Comme vous pouvez le voir dans le premier extrait de code, au lieu de implicitement d'ôter une option, j'aime assez l' if let de la syntaxe pour ôter l'option window de la propriété. Ici, je suis, comme if let a = a { } , de sorte que l'option a devient un non-optionnel référence à l'intérieur de l' if-déclaration du même nom – a.

Enfin self. n'est pas nécessaire lors de la référence à l' window de la propriété à l'intérieur de la même classe.

71voto

akashivskyy Points 11508

Vous devez marquer l' window et testNavigationController variables comme option:

var window : UIWindow?
var testNavigationController : UINavigationController?

Swift classes nécessitent des propriétés facultatives être initialisé lors de l'instanciation:

Les Classes et les structures doivent régler tous stockés leurs propriétés à une valeur initiale par le temps, une instance de cette classe ou d'une structure est créée. Stockées les propriétés ne peuvent pas être laissés dans un état indéterminé.

Propriétés de type facultatif sont automatiquement initialisés avec une valeur de zéro, indiquant que la propriété est l'intention délibérée d'avoir "pas encore de valeur" au cours de l'initialisation.

Lors de l'utilisation de variables facultatives, n'oubliez pas de les déballer avec !, tels que:

self.window!.backgroundColor = UIColor.whiteColor();

13voto

Hayaßusa Points 1

Si vous souhaitez initialiser votre viewController avec xib et que vous devez utiliser le contrôleur de navigation. Voici un morceau de code.

 var window: UIWindow?
var navController:UINavigationController?
var viewController:ViewController?

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

    viewController = ViewController(nibName: "ViewController", bundle: nil);
    navController = UINavigationController(rootViewController: viewController!);

    window?.rootViewController = navController;
    window?.makeKeyAndVisible()

    return true
}
 

6voto

PREMKUMAR Points 1603

Essayez le code suivant:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window!.backgroundColor = UIColor.whiteColor()

    // Create a nav/vc pair using the custom ViewController class

    let nav = UINavigationController()
    let vc = NextViewController ( nibName:"NextViewController", bundle: nil)

    // Push the vc onto the nav
    nav.pushViewController(vc, animated: false)

    // Set the window's root view controller
    self.window!.rootViewController = nav

    // Present the window
    self.window!.makeKeyAndVisible()
    return true

}
 

2voto

Hilen Points 31

Vous pouvez simplement le faire comme ceci:

 class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    var IndexNavigationController: UINavigationController?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        var IndexViewContoller : IndexViewController? = IndexViewController()
        self.IndexNavigationController = UINavigationController(rootViewController:IndexViewContoller)
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window!.rootViewController = self.IndexNavigationController
        self.window!.backgroundColor = UIColor.whiteColor()
        self.window!.makeKeyAndVisible()
        return true
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X