帮助大家更好的理解运行时动态方法, 这里能设定成一个UITextFied的分类,以后调用这个分类 就能很灵活的在任何地方改变占位文字的颜色了
特点:
1.取出系统的私有变量
2.运行时动态改变颜色
3.运行时交换方法
这里.h文件
@interface UITextField (PlaceHolder)
@property UIColor* placeholderColor;
@end
/*********************************************/
下面.m文件
#import <objc/message.h>
@implementation UITextField (PlaceHolder)
//开始就进行方法交换
+(void)load{
//获取自己设定的 setKn_PlaceHolder 方法
Method setKn_PlaceholderMehtod = class_getInstanceMethod(self, @selector(setKn_PlaceHolder:));
//获取自己设定的 系统的 setPlaceholder 方法
Method setPlaceholderMethod = class_getInstanceMethod(self, @selector(setPlaceholder:));
//对2个方法进行交换
method_exchangeImplementations( setKn_PlaceholderMehtod, setPlaceholderMethod);
//交换方法后 setKn_PlaceHolder 就变成 setPlaceholder
//交换方法后 setPlaceholder 就变成 setKn_PlaceHolder
}
//先设置一个有这样功能的方法
-(void)setKn_PlaceHolder:(NSString *) placeholder{
//开始用系统的 设置占位文字
// [self setPlaceholder:placeholder];
//交换方法后 setPlaceholder 就变成 setKn_PlaceHolder
//所以用setKn_PlaceHolder
[self setKn_PlaceHolder:placeholder];
//设置占位文字颜色
[self setPlaceholderColor:self.placeholderColor];
}
-(void)setPlaceholderColor:(UIColor *)placeholderColor{
//先保存占位文字的颜色
objc_setAssociatedObject(self, @"placeholderColor", placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
//用到的时候在给他
//获取自带的私有控件,取出系统私有属性
UILabel *placeholderLabel=[self valueForKey:@"placeholderLabel"];
//设置颜色
placeholderLabel.textColor=placeholderColor;
}
-(UIColor *)placeholderColor{
//取用的时候把颜色给他
return objc_getAssociatedObject(self, @"placeholderColor");
}
@end
我是KNSky,愿您每天开心 ^_^