2012-01-23 10 views
5

Ya sé cómo crear un protocolo, pero me pregunto cuál sería la mejor práctica para crear un protocolo proxy como lo hizo Apple para el protocolo UIAppearance y la implementación en ciertas clases de UI.Cómo crear un protocolo proxy como UIAppearance

¿Por qué quiero hacerlo de esta manera? Porque ya tengo muchas clases de UI y me gustaría centralizar la implementación del código para cambiar el color.

Quizás una pregunta extraña pero mi curiosidad me llevó a este punto.

Gracias

Respuesta

11

Sólo hacer el proxy un objeto estático y acceder a ella a través de métodos de nivel de clase, de la misma manera en que se implementa un conjunto unitario, por ejemplo

@implementation MyClass 

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

@end 

Luego, para cualquier propiedad de su clase, p. textColor, solo haz que tu clase use el valor en [[self class] proxy] .textColor en lugar de almacenar su propio valor. P.ej.

@interface MyClass : UIView 

@property (nonatomic, strong) textColor 

@end 

@implementation MyClass 

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

@end 

Si necesita una manera de refrescar sus puntos de vista en pantalla inmediatamente cada vez que se cambia una propiedad en el proxy, que podría hacer que al tener el proxy transmitió una NSNotification en su método textColor organismo, y tienen todos los casos observan esa notificación y el conjunto de llamadas NeedsDisplay en ellos mismos cuando lo reciben.

+0

Gracias @Nick, eso es genial !. Voy a seguir tu recomendación. –

+0

Oye, ¿por qué no aceptaste? ¿No funcionó para ti? –

+0

Realmente lo hizo, pero hago clic en él por error. Lo siento, Nick. Aceptado de nuevo. –

Cuestiones relacionadas