gpt4 book ai didi

iphone - 如何创建类似 UIAppearance 的代理协议(protocol)

转载 作者:太空狗 更新时间:2023-10-30 03:48:39 25 4
gpt4 key购买 nike

我已经知道如何创建协议(protocol),但我想知道创建代理协议(protocol)的最佳做法是什么,就像 Apple 为 UIAppearance 协议(protocol)和某些 UI 类的实现所做的那样。

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

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

谢谢

最佳答案

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

@implementation MyClass

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

@end

然后对于你类(class)的任何属性(property),例如textColor,让你的类使用 [[self class] proxy].textColor 中的值而不是存储它自己的值。例如

@interface MyClass : UIView

@property (nonatomic, strong) textColor

@end

@implementation MyClass

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

@end

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

关于iphone - 如何创建类似 UIAppearance 的代理协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8973383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com