Problema
Empecé a echar un vistazo de la nueva Swift
en Xcode 6
, y he intentado algunos proyectos de demostración y tutoriales. Ahora estoy atrapado en:
Crear instancias y luego presentar un viewController
desde un guión gráfico específico
Solución Objective-C
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboardName" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"myVCID"];
[self presentViewController:vc animated:YES completion:nil];
¿Cómo lograr esto en Swift?
ios
objective-c
swift
uiviewcontroller
E-Riddie
fuente
fuente
;
! ;) ¿Te importaría elaborar sobre elas UIViewController
? ¿Por qué es eso necesario?as
La palabra clave se utiliza para la conversión de texto. Es lo mismo que(UIViewController *)anObject
en el objetivo cinstantiateViewControllerWithIdentifier
devuelveAnyObject
(id
equivalente en Swift) y declarovc
comoUIViewController
, tengo que escribirAnyObject
enUIViewController
.Para las personas que usan la respuesta de @ akashivskyy para crear instancias
UIViewController
y tienen la excepción:Consejo rapido:
Implemente manualmente
required init?(coder aDecoder: NSCoder)
en su destinoUIViewController
que está tratando de instanciarSi necesita más descripción, consulte mi respuesta aquí
fuente
init(coder aDecoder: NSCoder!)
"requerido". Entonces ahora tienes que escribir lo siguiente:required init(coder aDecoder: NSCoder!)
Este enlace tiene las dos implementaciones:
Rápido:
C objetivo
Este enlace tiene un código para iniciar viewcontroller en el mismo guión gráfico
fuente
¡La respuesta de akashivskyy funciona bien! Pero, en caso de que tenga problemas para regresar del controlador de vista presentado, esta alternativa puede ser útil. ¡Funcionó para mí!
Rápido:
Obj-C:
fuente
El código actualizado de Swift 4.2 es
fuente
Esto funcionó bien para mí cuando lo puse en AppDelegate
fuente
Si desea presentarlo modalmente, debería tener algo como abajo:
fuente
Me gustaría sugerir una forma mucho más limpia. Esto será útil cuando tengamos varios guiones gráficos
1.Crea una estructura con todos tus guiones gráficos
2. Cree una extensión de UIStoryboard como esta
Proporcione el identificador del guión gráfico como el nombre de la clase y use el siguiente código para crear instancias
fuente
Swift 4:
fuente
Si tiene un Viewcontroller que no usa ningún storyboard / Xib, puede presionar a este VC en particular como se muestra a continuación:
fuente
Swift 3
fuente
Sé que es un hilo viejo, pero creo que la solución actual (usando un identificador de cadena codificado para un controlador de vista dado) es muy propenso a errores.
He creado un script de tiempo de compilación (al que puede acceder aquí ), que creará una forma segura del compilador para acceder e instanciar los controladores de vista desde todos los guiones gráficos dentro del proyecto dado.
Por ejemplo, el controlador de vista llamado vc1 en Main.storyboard se instanciará de la siguiente manera:
fuente
No importa lo que intenté, simplemente no funcionaría para mí, sin errores, pero tampoco un nuevo controlador de vista en mi pantalla. No sé por qué, pero envolverlo en la función de tiempo de espera finalmente lo hizo funcionar:
fuente
Swift 5
fuente
Creé una biblioteca que manejará esto mucho más fácil con una mejor sintaxis:
https://github.com/Jasperav/Storyboardable
Solo cambia Storyboard.swift y deja que se
ViewControllers
conformeStoryboardable
.fuente