自定义UITextField改变placeholder颜色
- 利用runTime获得UITextFi所有成员变量(只能获得传入类的所有成员变量,不包括父类),需要引入#import <objc/runtime.h>
unsigned int count = 0;
Ivar *ivars = class_copyIvarList([UITextField class], &count);
for (int i = 0; i < count; i++) {
Ivar ivar = *(ivars + i);
NSLog(@"%s",ivar_getName(ivar));
}
// 利用上述方法,可以找到任何一个类的所有成员变量
// 通过kvc改变_placeholderLabel的文字颜色
// 释放内存
free(ivars);
- 如果要求TextField在选中和非选中时的placeholder颜色不同,但是api没有提供这两种状态的方法,而我们又需要在textFiled内部实现这个需求。可以联想到,当textFiled被选中时,它一定是FirstResponse,进而联想到重写becomeFirstResponse和resignFirstResponse来实现
// 点击时(成为第一响应者)
- (BOOL)becomeFirstResponder {
// 设置占位符颜色
[self setValue:self.selectedColor ? self.selectedColor : self.textColor forKeyPath:@"_placeholderLabel.textColor"];
// 设置光标颜色
[self setTintColor:self.selectedColor ? self.selectedColor : self.textColor]; return [super becomeFirstResponder];;
}
// 默认状态下(放弃第一响应者)
- (BOOL)resignFirstResponder {
[self setValue:self.defaultColor ? self.defaultColor : self.textColor forKeyPath:@"_placeholderLabel.textColor"];
return [super resignFirstResponder];
}