2012-01-23 17 views
5

So già come creare un protocollo ma mi chiedo quale sarebbe la procedura migliore per creare un protocollo proxy come Apple ha fatto per il protocollo UIAppearance e l'implementazione su alcune classi UI.Come creare un protocollo proxy come UIAppearance

Perché voglio farlo in questo modo? Perché ho già un sacco di classi UI e vorrei centralizzare l'implementazione del codice per cambiare colore.

Forse una domanda strana ma la mia curiosità mi ha spinto fino a questo punto.

Grazie

risposta

11

Basta fare il proxy un oggetto statico e accedervi attraverso metodi a livello di classe, nello stesso modo che ci si implementa un Singleton, per esempio

@implementation MyClass 

+ (MyProxyObject *)proxy 
{ 
    static MyProxyObject *sharedProxy = nil; 
    if (sharedProxy == nil) 
    { 
     sharedProxy = [[MyProxyObject alloc] init]; 
    } 
    return sharedProxy; 
} 

@end 

Quindi, per qualsiasi proprietà della classe, ad es. textColor, basta che la classe utilizzi il valore in [[self class] proxy] .textColor invece di memorizzare il proprio valore. Per esempio.

@interface MyClass : UIView 

@property (nonatomic, strong) textColor 

@end 

@implementation MyClass 

- (UIColor *)textColor 
{ 
    return textColor ?: [[self class] proxy].textColor 
} 

@end 

Se avete bisogno di un modo per rinfrescare le vostre opinioni sullo schermo immediatamente ogni volta che una proprietà sul proxy viene modificato, si potrebbe fare che avendo il proxy trasmesso un NSNotification nel suo metodo textColor setter, e hanno tutte le istanze osservano quella notifica e chiama setNeedsDisplay su se stesso quando lo ricevono.

+0

Grazie @Nick, è geniale !. Seguirò la tua raccomandazione. –

+0

Ehi, perché non hai accettato? Non ha funzionato per te? –

+0

In realtà lo ha fatto, ma lo clicco per errore. Scusa, Nick. Accettato di nuovo. –

Problemi correlati