这是一种具有局部 UIAppearance 功能的自定义代理,可方便地对任何非 UIKit 对象进行外观设置。这种实现方式会追踪原始方法调用,并不要将这些方法的样式从外观应用到接收者上。
@interface MyObject : NSObject <DMAppearance>
@property (nonatomic, copy) NSString *name;
@end
@implementation MyObject
+ (instancetype)appearance
{
return (id)[DMAppearanceRecorder appearanceRecorderForClass:self];
}
@end
然后,当您的对象准备好接受外观样式时,您可以调用
[[DMAppearanceRecorder appearanceRecorderForClass:[self class]] applyAppearanceForTarget:self];
在您的代码中您将使用 MyObject 的地方
MyObject *appearance = [MyObject appearance];
appearance.name = @"Shared name";
还有别的地方
MyObject *myObject = [[MyObject alloc] init];
NSLog(@"%@", myObject.name);
myObject = [[MyObject alloc] init];
myObject.name = @"Custom name";
NSLog(@"%@", myObject.name);
显示结果将是
"Shared name"
"Custom name"
您还可以参考演示项目,以获取更多详细信息。