¿Cómo agrego el UIApplicationDelegate al final de la cadena UESponder?

Estoy tratando de proporcionar un método IBAction para la funcionalidad común que se requiere en varias partes de la aplicación.

es decir, el inicio de session se implementa de manera modal y, si tiene éxito, se obtiene una notificación que permite que todos los controlleres de vista cargados reaccionen a este evento (transición de anónima a autenticada)

 @interface MyAppDelegate : NSObject <UIApplicationDelegate> { ... } - (IBAction)loginTapped:(id)sender; @end 

Configuré la acción de ese button para el First Responder en IB, sin embargo, la cadena de respuesta no da a MyAppDelegate oportunidad de responder.

Mi problema es que, no quiero replicar el método en varias partes de la cadena de respuesta, me gustaría agregarlo a una class común que ya es una subclass.

La cadena UIResponder va hasta la UIApplication pero parece ser el final. Mi UIApplicationDelegate no puede participar.

¡Quiero insert o agregar el delegado de mi aplicación a la cadena de respuesta!

(o busque otra forma de conectar el UIButton el UIButton táctil dentro de una aplicación para toda la aplicación. Quiero evitar subclassar el UITabBarController o la UIWindow si es posible)

Puede subclass UIApplication para que -nextResponder devuelva el delegado de la aplicación si es una subclass UIResponder . A continuación, deberá modificar su llamada a UIApplicationMain para usar su subclass personalizada.

No lo he probado yo mismo, pero no puedo pensar en ningún problema inmediato que esto pueda causar.

Comenzando con iOS 5, AppDelegate es automáticamente el último enlace en la cadena de respuesta. Las templates de proyectos de Xcode crearán una AppDelegate que es una subclass de UIResponder lugar de NSObject . Sin embargo, para evitar nextResponder el AppDelegate, nextResponder el nextResponder AppDelegate y descargue el trabajo en un object UIResponder personalizado:

 - (UIResponder *)nextResponder { static dispatch_once_t onceToken; static LastUIResponder *lastResponder = nil; dispatch_once(&onceToken, ^{ lastResponder = [[LastUIResponder alloc] init]; }); return lastResponder; }