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 Core Data.
J'ai essayé de supprimer le storyboard et du projet en supprimant le storyboard principal et en définissant manuellement la fenêtre de 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 aucun initialiseur
Quelqu'un y a-t-il réussi?
Réponses:
Vous devez marquer les variables
window
ettestNavigationController
comme facultatives:Les classes Swift nécessitent l'initialisation des propriétés non facultatives lors de l'instanciation:
Lorsque vous utilisez des variables facultatives, n'oubliez pas de les déballer avec
!
, par exemple:la source
AppDelegate
(sauf si elle a une valeur lors de l'initialisation, ou si elle est résolue paresseusement). Si vous stockez une propriété facultative et que vous êtes sûr que ce n'est pas le casnil
, vous la «retirez de son option» à l'aide de l'!
opérateur.!
..white
?Tout ce qu'il faut pour ne pas utiliser les Storyboards pour
rootViewController
:1 · Remplacer
AppDelegate.swift
par:2 · Créez une
ViewController
sous - classe deUIViewController
:3 · Si vous avez créé le projet à partir d'un modèle Xcode:
"Main storyboard file base name"
deInfo.plist
.Main.storyboard
.Comme vous pouvez le voir dans le premier extrait de code, au lieu de déballer implicitement un optionnel, j'aime plutôt la
if let
syntaxe pour dérouler lawindow
propriété optionnelle . Ici, je l'utiliseif let a = a { }
pour que l'option facultativea
devienne une référence non facultative à l'intérieur de laif
déclaration avec le même nom -a
.Enfin
self.
n'est pas nécessaire lors du référencement de lawindow
propriété dans sa propre classe.la source
if let window = window {
? Je l'ai compris! C'est pour que vous n'ayez pas besoin de l'utiliser àwindow!
chaque fois.if let a = a {}
.makeKeyAndVisible()
à être après le réglagerootViewController
. Sinon, vous recevrez un avertissement sur la façon dont la fenêtre devrait avoir un contrôleur de vue racine à la fin du lancement de l'application.if let a = a { }
semble étrange. Êtes-vous sûr que vous pouvez utiliser le même nom de variable pour la référence non facultative? Apple utilise toujours des noms différents dans ses documents Swift. Aussi, pourquoi est-ce mieux que de simplement utiliser àwindow!
chaque fois?if let a = a { }
est parfaitement bien. Vous pouvez l'utiliserif let anA = a { }
si cela vous met plus à l'aise. 2.window!
est une vérification d'exécution puisque vous avez explicitement déballé un fichier facultatif. J'aime les vérifications de temps de compilation que Swift nous fournit, alors pourquoi ne pas l'utiliser.Si vous souhaitez initialiser votre viewController avec xib et que vous devez utiliser le contrôleur de navigation. Voici un morceau de code.
la source
Essayez le code suivant:
la source
J'ai trouvé la réponse que cela n'avait rien à voir avec la configuration de xcode, supprimer le storyboard et la référence du projet est la bonne chose. Cela avait à voir avec la syntaxe rapide.
Le code est le suivant:
la source
Vous pouvez simplement le faire comme ceci:
la source
Je vous recommande d'utiliser le contrôleur et xib
MyViewController.swift
etMyViewController.xib
(Vous pouvez créer via File-> New-> File-> Cocoa Touch Class et définir "également créer un fichier XIB" true, sous-classe de UIViewController)
et En
AppDelegate.swift
func application
écrivez le code suivantÇa devrait être du travail!
la source
Mis à jour pour Swift 3.0:
la source
Mise à jour: Swift 5 et iOS 13:
Info.plist
fichier:SceneDelegate.swift
et changerfunc scene
de:à
la source
Voici un exemple de test rapide complet pour un UINavigationController
la source
Pourquoi ne créez-vous pas simplement une application vide? le storyboard ne m'est pas créé ...
la source
Nous pouvons créer une application basée sur la navigation sans storyboard dans Xcode 6 (iOS 8) comme suit:
Créez une application vide en sélectionnant la langue du projet comme Swift.
Ajoutez de nouveaux fichiers de classe tactile Cocoa avec l'interface xib. (par exemple, TestViewController)
Dans le swift, un seul fichier interagit avec le fichier xib, c'est-à-dire * .swift, il n'y a pas de fichiers .h et .m.
Nous pouvons connecter les contrôles de xib avec un fichier swift comme dans iOS 7.
Voici quelques extraits pour travailler avec les commandes et Swift
Modifications du fichier AppDelegate.swift
Trouvez un exemple de code et d'autres informations sur http://ashishkakkad.wordpress.com/2014/06/16/create-a-application-in-xcode-6-ios-8-without-storyborard-in-swift-language-and -travailler-avec-commandes /
la source
Dans iOS 13 et supérieur, lorsque vous créez un nouveau projet sans storyboard, utilisez les étapes ci-dessous:
Créer un projet à l'aide de Xcode 11 ou supérieur
Supprimer la pointe et la classe du storyboard
Ajouter un nouveau fichier avec xib
Besoin de définir la vue racine comme UINavigationController SceneDelegate
ajoutez ci-dessous le code func scene (_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {// Utilisez cette méthode pour éventuellement configurer et attacher l'UIWindow
window
à l'UIWindowScene fourniescene
. // Si vous utilisez un storyboard, lawindow
propriété sera automatiquement initialisée et attachée à la scène. // Ce délégué n'implique pas que la scène ou la session de connexion est nouvelle (voir à laapplication:configurationForConnectingSceneSession
place). // garde let _ = (scène comme? UIWindowScene) else {retour}si laissez windowScene = scène comme? UIWindowScene {self.window = UIWindow (windowScene: windowScene) laissez mainController = HomeViewController () en tant que HomeViewController laissez navigationController = UINavigationController (rootViewController: mainController) self.window! .RootViewController.
la source