5
我知道如何创建一个协议,但我想知道创建代理协议的最佳做法是Apple如何为UIAppearance协议和某些UI类实现。如何创建一个代理协议,如UIAppearance
为什么我想这样做?因为我已经有很多UI类了,所以我想集中实现更改颜色的代码。
也许一个奇怪的问题,但我的好奇心驱使我到这一点。
感谢
我知道如何创建一个协议,但我想知道创建代理协议的最佳做法是Apple如何为UIAppearance协议和某些UI类实现。如何创建一个代理协议,如UIAppearance
为什么我想这样做?因为我已经有很多UI类了,所以我想集中实现更改颜色的代码。
也许一个奇怪的问题,但我的好奇心驱使我到这一点。
感谢
只是要代理一个静态对象,并通过类级别的方法,你会实现单以同样的方式,例如访问
@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时,
谢谢@尼克,那太棒了!我会遵循你的建议。 –
嘿,你为什么不接受?它不适合你吗? –
其实它确实,但我错误点击它。对不起尼克。再次接受。 –