使用Objective-C运行时,如何将方法+layerClass
添加到私有UIGroupTableViewCellBackground
类(而不是其超类UIView
)?注意:这仅用于测试(查看UITableViewStyleGrouped
如何设置单元格backgroundView
& selectedBackgroundView
)。
答案 0 :(得分:17)
要动态添加类方法而不是实例方法,请使用object_getClass(cls)
获取元类,然后将该方法添加到元类中。 E.g:
UIKIT_STATIC_INLINE Class my_layerClass(id self, SEL _cmd) {
return [MyLayer class];
}
+ (void)initialize {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class class = object_getClass(NSClassFromString(@"UIGroupTableViewCellBackground"));
NSAssert(class_addMethod(class, @selector(layerClass), (IMP)my_layerClass, "@:@"), nil);
});
}
通过将+layerClass
方法添加到UIGroupTableViewCellBackground
类别并使用转发类定义(即@class UIGroupTableViewCellBackground
)来进行编译,您也可以更轻松地完成此操作。
答案 1 :(得分:0)
试试这个魔法:
+ (void)load {
class_addMethod(objc_getMetaClass("UIGroupTableViewCellBackground"),
@selector(layerClass), (IMP)my_layerClass, "@:@"), nil);
});
}