- 首先我们通过打断点知道了textField中是有一个label的!
也就是说有setPlaceholder这个方法
下面我们就要利用runtime把我们写的方法和系统的setPlaceholder方法交换
首先新建一个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);
}
//这是设置颜色的方法
- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
//给系统的类增加一个属性,然后保存起来
objc_setAssociatedObject(self, "placeholderColor", placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
UILabel *placeholder = [self valueForKey:@"placeholderLabel"];
placeholder.textColor = placeholderColor;
}
- (UIColor *)placeholderColor
{
return objc_getAssociatedObject(self, "placeholderColor");
}
//交换方法的实现
- (void)setBS_Placeholder:(NSString *)placeholder
{
//因为交换方法实现所以是调用了系统的方法
[self setBS_Placeholder:placeholder];
//再把颜色赋值
self.placeholderColor = self.placeholderColor;
}
- 然后外面调用的时候导入这个分类的就可以了
#import "UITextField+BS.h"
self.textadd.placeholderColor = [UIColor redColor];
self.textadd.placeholder = @"你喜欢什么颜色?";
最后的效果: