幫助大家更好的理解運(yùn)行時動態(tài)方法, 這里能設(shè)定成一個UITextFied的分類,以后調(diào)用這個分類 就能很靈活的在任何地方改變占位文字的顏色了
特點(diǎn):
1.取出系統(tǒng)的私有變量
2.運(yùn)行時動態(tài)改變顏色
3.運(yùn)行時交換方法
這里.h文件
@interface UITextField (PlaceHolder)
@property UIColor* placeholderColor;
@end
/*********************************************/
下面.m文件
#import <objc/message.h>
@implementation UITextField (PlaceHolder)
//開始就進(jìn)行方法交換
+(void)load{
//獲取自己設(shè)定的 setKn_PlaceHolder 方法
Method setKn_PlaceholderMehtod = class_getInstanceMethod(self, @selector(setKn_PlaceHolder:));
//獲取自己設(shè)定的 系統(tǒng)的 setPlaceholder 方法
Method setPlaceholderMethod = class_getInstanceMethod(self, @selector(setPlaceholder:));
//對2個方法進(jìn)行交換
method_exchangeImplementations( setKn_PlaceholderMehtod, setPlaceholderMethod);
//交換方法后 setKn_PlaceHolder 就變成 setPlaceholder
//交換方法后 setPlaceholder 就變成 setKn_PlaceHolder
}
//先設(shè)置一個有這樣功能的方法
-(void)setKn_PlaceHolder:(NSString *) placeholder{
//開始用系統(tǒng)的 設(shè)置占位文字
// [self setPlaceholder:placeholder];
//交換方法后 setPlaceholder 就變成 setKn_PlaceHolder
//所以用setKn_PlaceHolder
[self setKn_PlaceHolder:placeholder];
//設(shè)置占位文字顏色
[self setPlaceholderColor:self.placeholderColor];
}
-(void)setPlaceholderColor:(UIColor *)placeholderColor{
//先保存占位文字的顏色
objc_setAssociatedObject(self, @"placeholderColor", placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
//用到的時候在給他
//獲取自帶的私有控件,取出系統(tǒng)私有屬性
UILabel *placeholderLabel=[self valueForKey:@"placeholderLabel"];
//設(shè)置顏色
placeholderLabel.textColor=placeholderColor;
}
-(UIColor *)placeholderColor{
//取用的時候把顏色給他
return objc_getAssociatedObject(self, @"placeholderColor");
}
@end
我是KNSky,愿您每天開心 _