设置UITextField的placeholder颜色

自定义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];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容