Как создать прокси-протокол типа UIAppearance - PullRequest
5 голосов
/ 23 января 2012

Я уже знаю, как создать протокол, но мне интересно, что было бы лучше всего создать прокси-протокол, как Apple, для протокола UIAppearance и реализации на некоторых классах пользовательского интерфейса.

Почему я хочу сделать это таким образом? Потому что у меня уже есть много классов пользовательского интерфейса, и я хотел бы централизовать реализацию кода для изменения цвета.

Может быть, странный вопрос, но мое любопытство привело меня к этой точке.

Спасибо

1 Ответ

11 голосов
/ 23 января 2012

Просто сделайте прокси статическим объектом и получите доступ к нему с помощью методов уровня класса, так же, как вы реализовали бы синглтон, например,

@implementation MyClass

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

@end

Тогда для любой собственности вашего класса, например, textColor, просто попросите ваш класс использовать значение в [[self class] proxy] .textColor вместо хранения своего собственного значения. Э.Г.

@interface MyClass : UIView

@property (nonatomic, strong) textColor

@end

@implementation MyClass

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

@end

Если вам нужен способ немедленного обновления экранных представлений при изменении свойства прокси, вы можете сделать это, передав прокси-серверу NSNotification в своем методе setColor textColor, и чтобы все экземпляры наблюдали это уведомление и вызывали setNeedsDisplay на себя, когда они его получают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...