2010-07-28 14 views
5

sto cercando di fornire un metodo per la funzionalità IBAction comune che viene richiesto in varie parti del app.Come aggiungere UIApplicationDelegate alla fine della catena UIResponder?

cioè apposito è implementato modale, e se riesce risultati in una notifica che consente a tutti i controllori immagine caricati a reagire a questo evento (transizione da anonimo autenticato)

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

ho impostato l'azione di tale pulsante al primo risponditore in IB, tuttavia la catena di risposta non dà a MyAppDelegate la possibilità di rispondere.

Il mio problema è che, non voglio replicare il metodo in varie parti della catena di risposta, vorrei aggiungerlo a una classe comune che è già una sottoclasse.

La catena UIResponder arriva fino allo UIApplication ma sembra essere la fine. Il mio UIApplicationDelegate non arriva a partecipare.

voglio inserire o aggiungere la mia app delegato alla catena risponditore!

(o trovare un altro modo per collegare il touch-up-inside UIButton a un'implementazione a livello di app .. voglio evitare sottoclasse della UITabBarController o UIWindow se possibile)

risposta

2

Si potrebbe sottoclasse UIApplication a avere -nextResponder restituire il delegato dell'applicazione se si tratta di una sottoclasse UIResponder. Dovrai quindi modificare la chiamata su per utilizzare la sottoclasse personalizzata.

Non ho provato io stesso, ma non riesco a pensare di eventuali problemi immediati questo provocherebbe.

+1

Vorrei evitare di sottoclassi nulla se possibile. La documentazione di Apple guidano lontano da sottoclasse 'UIApplication': * "raramente v'è la necessità valida per estendere questa classe; ... essere molto sicuri di ciò che si sta cercando di realizzare con la sottoclasse." * – ohhorob

0

partire con iOS 5, l'AppDelegate è automaticamente l'ultimo anello della catena responder. modelli di progetto Xcode creeranno un AppDelegate che è una sottoclasse di UIResponder piuttosto che NSObject. Tuttavia, per evitare di ingombrare l'AppDelegate, ignorare l'AppDelegate del nextResponder e scaricare il lavoro in una UIResponder oggetto personalizzato:

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