如何创建像UIAppearance这样的代理协议

时间:2012-01-23 14:44:18

标签: iphone objective-c ipad ios5

我知道如何创建协议但我想知道创建代理协议的最佳做法是什么,例如Apple为UIAppearance协议和某些UI类的实现。

为什么我要这样做呢?因为我已经有很多UI类,我想集中实现代码的改变颜色。

也许是一个奇怪的问题,但我的好奇心驱使我到了这一步。

由于

1 个答案:

答案 0 :(得分:11)

只需使代理成为静态对象并通过类级方法访问它,就像实现单例一样,例如

@implementation MyClass

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

@end

然后,对于您班级的任何财产,例如textColor,让你的类使用[[self class] proxy] .textColor中的值,而不是存储自己的值。 E.g。

@interface MyClass : UIView

@property (nonatomic, strong) textColor

@end

@implementation MyClass

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

@end

如果您需要在代理上的属性更改时立即刷新屏幕视图的方法,您可以通过让代理在其textColor setter方法中广播NSNotification并让所有实例观察到该通知和调用来实现setNeeds在收到它们时自行显示。