2010-12-28 4 views
6

Sto scrivendo una libreria "blackbox". In questa libreria ho bisogno di aggiungere una subView a qualsiasi app che usi la mia libreria.
Pertanto, non ho alcun riferimento all'appDelegate né alla UIWindow dell'applicazione.
L'unica cosa che l'applicazione esterna sta facendo ora è la seguente:
Ottenere l'oggetto UIWindow/appDelegate attivo corrente senza tenere gli oggetti app

myRec = [[Rec alloc] init]; 
myRec.delegate = self; 
[myRec start]; 

dove Rec è la libreria Blackbox e myRec è l'istanza che viene usato da un'applicazione esterna.
Ovviamente, non è possibile ottenere alcun riferimento alla vista dell'app tramite il membro delegato perché non è definito come il tipo specifico dell'app esterna.

Tutte le idee su come ottenere una comprensione sull'oggetto UIWindow/AppDelegate oggetto senza conoscere la propria identità in anticipo ??

Grazie !!

risposta

20

Ottenere l'App Delegato:

id<UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate]; 

Ottenere l'oggetto UIWindow:

UIWindow* window = [[UIApplication sharedApplication] keyWindow]; 
+0

Grazie! Sembra buono ! – Guys

+0

Grazie !!! lavorando come fascino !! –

1
[[UIApplication sharedApplication] delegate] 

sarà sempre restituisce qualcosa di conforme alle id<UIApplicationDelegate>

Btw, questo è il modo corretto di farlo, creare un protocollo che qualche classe nell'applicazione dovrebbe conformarsi (cioè l'AppDelegate) e passa quella lezione alla tua biblioteca. La libreria può verificare che la classe sia ben conforme al protocollo e, in caso contrario, non riesca con un messaggio nel registro.

0

@ phix23 la sua risposta a Swift 3:

if let appDelegate = UIApplication.shared.delegate, let window = appDelegate.window { 
    let yourview = window?.rootViewController?.view 
} 
Problemi correlati