2012-01-23 21 views
5

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

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

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

感谢

回答

11

只是要代理一个静态对象,并通过类级别的方法,你会实现单以同样的方式,例如访问

@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 

如果您需要一种方法来立即刷新屏幕上的看法,只要在代理的属性发生变化时,你可以做到这一点通过具有代理在其文字颜色setter方法广播一个NSNotification,并且拥有所有的情况下观察当他们收到通知并调用setNeedsDisplay时,

+0

谢谢@尼克,那太棒了!我会遵循你的建议。 –

+0

嘿,你为什么不接受?它不适合你吗? –

+0

其实它确实,但我错误点击它。对不起尼克。再次接受。 –

相关问题