iOS: llamar al método App Delegate desde ViewController

Resuelto Mytheral asked hace 54 años • 13 respuestas

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 se podría hacer con relativa facilidad en IB, pero esa no es una opción.

Un ejemplo de lo que quiero hacer sería si tuvieras dos controladores de vista, uno con una pantalla de presentación de la casa. El otro controlador de vista tenía un recorrido por la casa en el que se podían recorrer todas las habitaciones en un orden establecido. La pantalla de presentación tendría botones para cada habitación que le permitirían saltar a cualquier punto del recorrido.

Mytheral avatar Jan 01 '70 08:01 Mytheral
Aceptado

Puedes acceder al delegado así:

MainClass *appDelegate = (MainClass *)[[UIApplication sharedApplication] delegate];

Reemplace MainClass con el nombre de su clase de aplicación.

Luego, siempre que tenga una propiedad para el otro controlador de vista, puede llamar a algo como:

[appDelegate.viewController someMethod];
Cristian Radu avatar Feb 22 '2011 19:02 Cristian Radu

Y si alguien se pregunta cómo hacer esto en swift:

if let myDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
   myDelegate.someMethod()
}
canhazbits avatar Oct 17 '2014 03:10 canhazbits

¿Parece que solo necesitas una UINavigationControllerconfiguración?

Puede obtenerlo AppDelegateen cualquier parte del programa a través de

YourAppDelegateName* blah = (YourAppDelegateName*)[[UIApplication sharedApplication]delegate];

En el delegado de su aplicación, debe tener configurado su controlador de navegación, ya sea a través de IB o en código.

En el código, suponiendo que ya haya creado su controlador de vista 'Descripción general de la casa', sería algo como esto en su AppDelegate didFinishLaunchingWithOptions...

self.m_window = [[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds] autorelease];
self.m_navigationController = [[[UINavigationController alloc]initWithRootViewController:homeViewController]autorelease];
[m_window addSubview:self.m_navigationController.view];

Después de esto, solo necesita un controlador de vista por 'habitación' e invocar lo siguiente cuando se detecta un evento de clic en un botón...

YourAppDelegateName* blah = (YourAppDelegateName*)[[UIApplication sharedApplication]delegate];
[blah.m_navigationController pushViewController:newRoomViewController animated:YES];

No he probado el código anterior, así que perdone los errores de sintaxis, pero espero que el pseudocódigo sea de ayuda...

sradforth avatar Feb 22 '2011 19:02 sradforth

Así es como lo hago.

[[[UIApplication sharedApplication] delegate] performSelector:@selector(nameofMethod)];

No olvides importar.

#import "AppDelegate.h"
mikemike396 avatar Jul 08 '2013 17:07 mikemike396