首先新建一個繼承自UITextFiled的類,在.m文件中導入<objc/runtime.h>,并定義靜態的變量儲存UITextFiled的內部屬性作為Key值。
static NSString * const PlacerholderColorKeyPath = @"_placeholderLabel.textColor";
重寫以下方法
- (void)awakeFromNib
{
//? ? UILabel *placeholderLabel = [self valueForKeyPath:@"_placeholderLabel"];
//? ? placeholderLabel.textColor = [UIColor redColor];
//? ? // 修改占位文字顏色,利用kvc改變屬性值
//? ? [self setValue:[UIColor grayColor] forKeyPath:@"_placeholderLabel.textColor"];
// 設置光標顏色和文字顏色一致
self.tintColor = self.textColor;
// 不成為第一響應者
[self resignFirstResponder];
}
/**
* 當前文本框聚焦時就會調用
*/
- (BOOL)becomeFirstResponder
{
// 修改占位文字顏色
[self setValue:self.textColor forKeyPath:PlacerholderColorKeyPath];//占位文字顏色和輸入的文字顏色一樣
return [super becomeFirstResponder];
}
/**
* 當前文本框失去焦點時就會調用
*/
- (BOOL)resignFirstResponder
{
// 修改占位文字顏色
[self setValue:[UIColor grayColor] forKeyPath:PlacerholderColorKeyPath];
return [super resignFirstResponder];
}
在需要用改變texeFiled的占位文字和光標顏色時,只需要繼承這個自己寫的類就可以了。