¿Cómo configuro programáticamente el InitialViewController
Storyboard? Quiero abrir mi guión gráfico a una vista diferente dependiendo de alguna condición que puede variar de un lanzamiento a otro.
252
¿Cómo configuro programáticamente el InitialViewController
Storyboard? Quiero abrir mi guión gráfico a una vista diferente dependiendo de alguna condición que puede variar de un lanzamiento a otro.
Respuestas:
Cómo prescindir de un controlador de vista inicial ficticio
Asegúrese de que todos los controladores de vista iniciales tengan una ID de Storyboard.
En el guión gráfico, desmarque el atributo "Es el controlador de vista inicial" del primer controlador de vista.
Si ejecuta su aplicación en este punto, leerá:
Y notará que su propiedad de ventana en el delegado de la aplicación ahora es nula.
En la configuración de la aplicación, vaya a su objetivo y a la
Info
pestaña. Hay claro el valor deMain storyboard file base name
. En laGeneral
pestaña, borre el valor deMain Interface
. Esto eliminará la advertencia.Cree la ventana y el controlador de vista inicial deseado en el
application:didFinishLaunchingWithOptions:
método del delegado de la aplicación :fuente
didFinishLaunchingWithOptions
Se llama a @bdv cuando la aplicación se inicia en un nuevo proceso. Si va a la pantalla de inicio y vuelve a la aplicación, este método no se volverá a invocar. (A menos que iOS finalice debido a restricciones de memoria). Intente detener la aplicación e iniciarla nuevamente desde su IDE. Si el problema continúa, publícalo en SO y estaré encantado de ayudarte, amigo.self.window = UIWindow(frame: UIScreen.mainScreen().bounds) var storyboard = UIStoryboard(name: "Main", bundle: nil) var viewController: UIViewController = // self.window!.rootViewController = viewController self.window!.makeKeyAndVisible()
Para todos los amantes de Swift , aquí está la respuesta de @Travis traducida a SWIFT :
Haz lo que @Travis explicó antes del código del objetivo C. Luego,
El
ExampleViewController
sería el nuevo controlador de vista inicial que le gustaría mostrar.Los pasos explicados:
¡Disfruta y feliz programación!
fuente
Puede configurar mediante programación el rootViewController de la ventana clave en
(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
por ejemplo:
fuente
init()
/deinit()
, pero sin ejecutarviewDidLoad()
o inicializar correctamenteIBOutlet
-s. Asegúrese de que el código esté listo para ello.Swift 3: Actualización al código de @ victor-sigler
fuente
Puede configurar el controlador rootviewcontroller de navegación como un controlador de vista principal. Esta idea puede usarse para el inicio de sesión automático según los requisitos de la aplicación.
Para usuarios de StoryboardSegue
Gracias
fuente
Abra mainstoryboard, seleccione la vista que desea que comience primero, luego abra Utilidades -> Atributos. Debajo del "Controlador de vista" verá el botón de opción "Es el Controlador de vista inicial". Solo selecciónalo.
--- A la pregunta revisada:
Puede intentarlo: escriba un método en la sección ViewDidLoad de su vista inicial y cuando el método se ejecute al iniciar la aplicación, el método desencadena un segue a otra vista.
fuente
SWIFT 5
Si no tiene un ViewController establecido como ViewController inicial en el guión gráfico, debe hacer 2 cosas:
Finalmente, ahora puede agregar su código en SceneDelegate:
fuente
Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set
advertencia que tenía después de que decidí instanciar mi VC inicial en el código. Un punto importante, cuando @ rs7 dice "eliminar el campo de nombre del guión gráfico", significan toda la fila de la lista, no solo el contenido del campo en sí.No creo que sea posible. En su lugar, puede tener un controlador inicial que tendrá segues a diferentes controladores de vista. En el inicio, puede decidir qué segue realizar mediante programación.
fuente
Puede configurar
initial view controller
usando Interface Builder, así como mediante programación.A continuación se muestra el enfoque utilizado programáticamente.
C objetivo :
Rápido:
fuente
Creé una clase de enrutamiento para manejar la navegación dinámica y mantener limpia la clase AppDelegate, espero que también ayude a otros.
Y en tu AppDelegate llama a esto
fuente
Otra solución al usar Swift 3 y Swift 4 para evitar el lanzamiento de fuerza es así
Y a continuación se utiliza con
UINavigationController
fuente
En
AppDelegate.swift
puedes agregar el siguiente código:Por supuesto, debe implementar su lógica, según los criterios que elija para un controlador de vista apropiado.
Además, no olvide agregar una identidad (seleccione guión gráfico -> Escena del controlador -> Mostrar el inspector de identidad -> asignar StorboardID).
fuente
RESPUESTA ACTUALIZADA para iOS 13 y delegado de escena:
asegúrese de que en su archivo info.plist vaya al Manifiesto de escena de aplicación -> Configuración de escena -> Rol de sesión de aplicación -> Elemento 0 y elimine la referencia al guión gráfico principal allí también. De lo contrario, recibirá la misma advertencia acerca de no crear una instancia del guión gráfico.
Además, mueva el código del delegado de la aplicación a la escena del método de delegado de escena (_: willConnectTo: opciones :), ya que aquí es donde se manejan los eventos del ciclo de vida.
fuente
Hace unos días me encontré con la misma situación. Un truco muy simple resolvió este problema. Puse oculto mi controlador de vista inicial antes del lanzamiento2. Si el controlador de vista inicial es el controlador correcto, se establece en visible en viewDidLoad. De lo contrario, se realiza una segue al controlador de vista deseado. Funciona perfectamente en iOS 6.1 y superior. Estoy seguro de que funciona en versiones anteriores de iOS.
fuente
Gracias modificó esto de la siguiente manera en AppDelegate:
fuente
Solución simple encontrada: no es necesario eliminar la "verificación del controlador de vista inicial" del guión gráfico y editar la pestaña de información del proyecto y usar
makeKeyAndVisible
, simplemente coloqueen
fuente
rootVC
a partirinstantiateViewControllerWithIdentifier
, ¿correcto?Otra forma es presentar viewController,
Primero debe crear el objeto de su guión gráfico, luego cambiar la raíz (si es necesario) y luego tomar la referencia de un controlador de vista particular que se empuja al controlador de vista actual (si cambia la raíz) o simplemente presenta un nuevo controlador de vista que puede
fuente
Swift 4, Xcode 9
en el archivo AppDelegate.swift
fuente
fuente
Swift 5 o superior # crea el controlador de vista de ruta con este código simple. Si está utilizando xcode 11 o superior, inicialice primero
var window: UIWindow?
en AppDelegatefuente
Si prefiere no cambiar applicationDidFinish, puede hacer el siguiente truco:
Configure el controlador de navegación como un controlador de vista inicial y asígnele una clase personalizada 'MyNavigationController'. Luego puede ajustar su controlador de vista raíz durante viewDidLoad: anulará el controlador de vista raíz que configuró en su guión gráfico.
fuente
Seleccione el controlador de vista que desea abrir primero y vaya al inspector de atributos. Vaya a la escena inicial y verifique la opción del controlador de vista inicial.
Ahora este será su controlador de vista inicial que se abrirá primero cuando se inicie la aplicación.
fuente