需求:简单统一快速的给app里面所有的button修改字体颜色
#import "UIButton+NXButton.h"
@implementationUIButton (NXButton)
+ (void)load {
staticdispatch_once_tonceToken;
dispatch_once(&onceToken, ^{
MethodcolorMethod =class_getInstanceMethod([selfclass],@selector(willMoveToSuperview:));
MethodnewColorMethod =class_getInstanceMethod([selfclass],@selector(nx_willMoveToSuperview:));
BOOLsuccess =class_addMethod([selfclass],@selector(willMoveToSuperview:),method_getImplementation(newColorMethod),method_getTypeEncoding(newColorMethod));
if(success) {
class_replaceMethod([selfclass],@selector(nx_willMoveToSuperview:),method_getImplementation(colorMethod),method_getTypeEncoding(colorMethod));
}else{
method_exchangeImplementations(colorMethod, newColorMethod);
}
});
}
- (void)nx_willMoveToSuperview:(UIView*)newSuperView {
self.titleLabel.font = [UIFont systemFontOfSize:20];
[self setTitleColor:[UIColor yellowColor] forState:UIControlStateNormal];
}
@end
总结:
1.class_getInstanceMethod:得到类的实例方法
class_getClassMethod:得到类的类方法
2.class_addMethod:
OBJC_EXPORT BOOL class_addMethod(Class cls, SEL name, IMP imp,
constchar*types)
__OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
cls 参数表示需要添加新方法的类;name 参数表示 selector 的方法名称(自己定义的方法);imp 即 implementation ,表示由编译器生成的、指向实现方法的指针。这个指针指向的方法就是我们新添加的方法;*types 表示我们要添加的方法的返回值和参数