Lo que estoy tratando de hacer es hacer clic en un botón (que se creó en el código) y hacer que llame a un controlador de vista diferente y luego ejecutar una función en el nuevo controlador de vista.
Sé que podría hacerse con relativa facilidad en IB, pero esa no es una opción.
Un ejemplo de lo que quiero hacer sería si tuviera dos controladores de vista, uno con una pantalla de inicio de la casa. El otro controlador de vista tenía un recorrido por la casa en el que podía pasar por todas las habitaciones en un orden establecido. La pantalla de bienvenida tendría botones para cada habitación que te permitirían saltar a cualquier punto del recorrido.
fuente
Y si alguien se pregunta cómo hacer esto en
swift
:fuente
nil
? ¿No es eso una aplicación SIEMPRE tiene un AppDelegate?sharedApplication()
debe reemplazarse porshared
. es decir, elimine "Aplicación" y los paréntesis. Entonces, el código de trabajo completo a partir de Swift 5.2 sería:if let myDelegate = UIApplication.shared.delegate as? AppDelegate { myDelegate.someMethod() }
¿Parece que solo necesitas una
UINavigationController
configuración?Puede obtenerlo
AppDelegate
en cualquier parte del programa a través deEn su delegado de aplicaciones, debe tener la configuración del controlador de navegación, ya sea a través de IB o en código.
En el código, suponiendo que haya creado su controlador de vista 'Visión general de la casa' ya sería algo así en su
AppDelegate
didFinishLaunchingWithOptions
...Después de esto, solo necesita un controlador de vista por 'habitación' e invocar lo siguiente cuando se selecciona un evento de clic de botón ...
No he probado el código anterior, así que perdona los errores de sintaxis, pero espero que el pseudocódigo sea de ayuda ...
fuente
Así es como lo hago.
No te olvides de importar.
fuente
Solo sigue estos pasos
1. Importe su delegado de aplicaciones en su clase donde desee el objeto delegado de aplicaciones.
2.dentro de su clase, cree una instancia del objeto delegado de su aplicación (es básicamente un singleton).
3.Ahora invoque el método usando el selector
o directamente por
para rápido
Recomendaré el primero. Corre y vete.
fuente
Evita tener que incluir tu AppDelegate.h en todas partes. Es un elenco simple que recorre un largo camino, lo que permite desarrollar un controlador independiente y reutilizarlos en otro lugar sin preocuparse por el nombre de la clase, etc.
Disfrutar
fuente
Ya se han agregado muchas buenas respuestas. Aunque quiero agregar algo que me convenga la mayor parte del tiempo.
y eso es. Úselo en toda la aplicación como una constante.
p.ej
No olvide importar yourAppDelegate.h en el archivo .pch o macros correspondiente.
fuente
Si alguien necesita lo mismo en Xamarin (Xamarin.ios / Monotouch), esto funcionó para mí:
(Requiere usar UIKit;)
fuente
Y en caso de que necesite acceso a su delegado de extensión WatchKit desde un controlador de vista en watchOS:
fuente
Actualización para Swift 3.0 y superior
llamando al método anterior desde su controlador siguiendo
Salida:
fuente
Usted puede agregar
#define uAppDelegate (AppDelegate *)[[UIApplication sharedApplication] delegate]
en su proyecto dePrefix.pch
archivo y luego llamar a cualquier método de suAppDelegate
en cualquieraUIViewController
con el siguiente código.fuente
Incluso si es técnicamente factible, NO es un buen enfoque. Cuando dices: "La pantalla de bienvenida tendría botones para cada habitación que te permitirían saltar a cualquier punto del recorrido". Entonces, ¿desea pasar por appdelegate para llamar a estos controladores a través de eventos tohc en los botones?
Este enfoque no sigue las pautas de Apple y tiene muchos inconvenientes.
fuente
En 2020, iOS13, xCode 11.3. Lo que funciona para Objective-C es:
#import "AppDelegate.h"
Está funcionando para mí, ¡espero lo mismo para ti! :RE
fuente