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; }