Crear un nuevo proyecto en XCode 6 no permite deshabilitar Storyboards. Solo puede seleccionar Swift u Objective-C y usar o no Core Data.
Intenté eliminar el guión gráfico y del proyecto eliminar el guión gráfico principal y configurar manualmente la ventana desde didFinishLaunching
En AppDelegate tengo esto:
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
}
}
Sin embargo, XCode me da un error:
La clase 'AppDelegate' no tiene inicializadores
¿Alguien ha tenido éxito en esto?
Respuestas:
Debe marcar las variables
window
ytestNavigationController
como opcionales:Las clases Swift requieren que se inicialicen propiedades no opcionales durante la instanciación:
Cuando use variables opcionales, recuerde desenvolverlas con
!
, como:fuente
AppDelegate
(a menos que tenga un valor durante la inicialización o se resuelva de forma perezosa). Si almacena una propiedad opcional y está seguro de que no lo esnil
, "desenvuelva su opcionalidad" usando el!
operador.!
..white
?Todo lo que se necesita para no usar Storyboards para
rootViewController
:1 · Cambiar
AppDelegate.swift
a:2 · Cree una
ViewController
subclase deUIViewController
:3 · Si creó el proyecto a partir de una plantilla de Xcode:
"Main storyboard file base name"
deInfo.plist
.Main.storyboard
.Como puede ver en el primer fragmento de código, en lugar de desenvolver implícitamente un opcional, me gusta la
if let
sintaxis para desenvolver lawindow
propiedad opcional . Aquí lo estoy usando asíif let a = a { }
para que lo opcional sea
convierta en una referencia no opcional dentro de laif
-declaración con el mismo nombre-a
.Finalmente,
self.
no es necesario cuando se hace referencia a lawindow
propiedad dentro de su propia clase.fuente
if let window = window {
? ¡Me lo imaginé! Es por lo que no es necesario usarlowindow!
todo el tiempo.if let a = a {}
.makeKeyAndVisible()
a estar después de configurarrootViewController
. De lo contrario, recibirá una advertencia sobre cómo se espera que la ventana tenga un controlador de vista raíz al final del inicio de la aplicación.if let a = a { }
se ve raro. ¿Está seguro de que está bien usar el mismo nombre de variable para la referencia no opcional? Apple siempre usa nombres diferentes en sus documentos Swift. Además, ¿por qué esto es mejor que usarlowindow!
todo el tiempo?if let a = a { }
está perfectamente bien. Puedes usarloif let anA = a { }
si te hace sentir más cómodo. 2.window!
es una comprobación de tiempo de ejecución, ya que desenvuelve explícitamente un archivo. Me gustan las comprobaciones de tiempo de compilación que nos proporciona Swift, así que ¿por qué no usarlas?Si desea inicializar su viewController con xib y necesita usar el controlador de navegación. Aquí hay un fragmento de código.
fuente
Prueba el siguiente código:
fuente
Encontré que la respuesta no tenía nada que ver con la configuración de xcode, eliminar el guión gráfico y la referencia del proyecto es lo correcto. Tenía que ver con la sintaxis rápida.
El código es el siguiente:
fuente
Puedes hacerlo así:
fuente
Te recomiendo que uses controller y xib
MyViewController.swift
yMyViewController.xib
(Puede crear a través de Archivo-> Nuevo-> Archivo-> Clase Cocoa Touch y establecer "también crear archivo XIB" verdadero, subclase de UIViewController)
y en
AppDelegate.swift
func application
escribir el siguiente código¡Debería ser trabajo!
fuente
Actualizado para Swift 3.0:
fuente
Actualización: Swift 5 y iOS 13:
Info.plist
archivo:SceneDelegate.swift
y cambiarfunc scene
de:a
fuente
Aquí hay un ejemplo de prueba rápido completo para un UINavigationController
fuente
¿Por qué no crea una aplicación vacía? el storyboard no me fue creado ...
fuente
Podemos crear una aplicación basada en navegación sin guión gráfico en Xcode 6 (iOS 8) de la siguiente manera:
Cree una aplicación vacía seleccionando el idioma del proyecto como Swift.
Agregue nuevos archivos de clases de cocoa touch con la interfaz xib. (por ejemplo, TestViewController)
En el swift, solo tenemos un archivo que interactúa con el archivo xib, es decir, * .swift, no hay archivos .hy .m.
Podemos conectar los controles de xib con un archivo rápido igual que en iOS 7.
A continuación se muestran algunos fragmentos para trabajar con los controles y Swift
Cambios en el archivo AppDelegate.swift
Encuentre ejemplos de código y otra información en http://ashishkakkad.wordpress.com/2014/06/16/create-a-application-in-xcode-6-ios-8-without-storyborard-in-swift-language-and -trabajar-con-controles /
fuente
En iOS 13 y superior, cuando cree un nuevo proyecto sin guión gráfico, utilice los siguientes pasos:
Cree un proyecto usando Xcode 11 o superior
Eliminar la plumilla y la clase del guión gráfico
Agregar nuevo archivo nuevo con xib
Necesita establecer la vista raíz como UINavigationController SceneDelegate
agregue el siguiente código func scene (_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {// Use este método para configurar y adjuntar opcionalmente la UIWindow
window
a la UIWindowScene proporcionadascene
. // Si usa un guión gráfico, lawindow
propiedad se inicializará automáticamente y se adjuntará a la escena. // Este delegado no implica que la escena o sesión de conexión sea nueva (ver en suapplication:configurationForConnectingSceneSession
lugar). // guard let _ = (escena como? UIWindowScene) else {return}si deja windowScene = escena como? UIWindowScene {self.window = UIWindow (windowScene: windowScene) deja mainController = HomeViewController () como HomeViewController deja que navigationController = UINavigationController (rootViewController: mainController) self.window! .RootViewController = navigationController self.window! .Make}
fuente