- 首先我們通過打斷點(diǎn)知道了textField中是有一個(gè)label的!
Snip20160317_23.png
也就是說有setPlaceholder這個(gè)方法
下面我們就要利用runtime把我們寫的方法和系統(tǒng)的setPlaceholder方法交換
首先新建一個(gè)UITextField的分類
然后
#import <objc/message.h>
//分類的代碼
+ (void)load
{
Method placeholder = class_getInstanceMethod(self, @selector(setPlaceholder:));
Method placeBS_holder = class_getInstanceMethod(self, @selector(setBS_Placeholder:));
method_exchangeImplementations(placeholder, placeBS_holder);
}
//這是設(shè)置顏色的方法
- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
//給系統(tǒng)的類增加一個(gè)屬性汞幢,然后保存起來
objc_setAssociatedObject(self, "placeholderColor", placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
UILabel *placeholder = [self valueForKey:@"placeholderLabel"];
placeholder.textColor = placeholderColor;
}
- (UIColor *)placeholderColor
{
return objc_getAssociatedObject(self, "placeholderColor");
}
//交換方法的實(shí)現(xiàn)
- (void)setBS_Placeholder:(NSString *)placeholder
{
//因?yàn)榻粨Q方法實(shí)現(xiàn)所以是調(diào)用了系統(tǒng)的方法
[self setBS_Placeholder:placeholder];
//再把顏色賦值
self.placeholderColor = self.placeholderColor;
}
- 然后外面調(diào)用的時(shí)候?qū)脒@個(gè)分類的就可以了
#import "UITextField+BS.h"
self.textadd.placeholderColor = [UIColor redColor];
self.textadd.placeholder = @"你喜歡什么顏色波俄?";
最后的效果:
Snip20160317_24.png