2012-01-23 12 views
5

Wiem, jak utworzyć protokół już, ale zastanawiam się, jaka byłaby najlepsza praktyka tworzenia protokołu proxy, takiego jak Apple dla protokołu UIAppearance i implementacji w niektórych klasach interfejsu użytkownika.Jak utworzyć protokół proxy, taki jak UIAppearance

Dlaczego chcę to zrobić w ten sposób? Ponieważ mam już wiele klas interfejsu i chciałbym scentralizować implementację kodu zmieniającego kolor.

Może jakieś dziwne pytanie, ale moja ciekawość doprowadziła mnie do tego punktu.

Dzięki

Odpowiedz

11

Tylko proxy statyczny obiekt i uzyskać do niego dostęp za pomocą metod klasy poziom, sam sposób chcesz zrealizować, na przykład pojedyncza

@implementation MyClass 

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

@end 

Następnie dla dowolnej własności Twojej klasy, np. textColor, po prostu niech twoja klasa używa wartości w [[self class] proxy] .textColor zamiast przechowywać własną wartość. Na przykład.

@interface MyClass : UIView 

@property (nonatomic, strong) textColor 

@end 

@implementation MyClass 

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

@end 

Jeśli potrzebny jest sposób, aby odświeżyć swoje wyświetlanymi widoki natychmiast, gdy właściwość na pełnomocnika ulega zmianie, można to zrobić poprzez pełnomocnika emitować NSNotification w swojej metodzie textColor setter i mają wszystkie instancje obserwować to powiadomienie i wywołanie setNeedsDisplay na siebie, gdy je otrzymają.

+0

Dzięki @Nick, to genialne !. Zamierzam postępować zgodnie z twoją rekomendacją. –

+0

Hej, dlaczego nie zaakceptowałeś? Czy to nie działa? –

+0

Właściwie to zrobił, ale kliknę go przez błąd. Przepraszam Nick. Zaakceptowany ponownie. –

Powiązane problemy