處理文本占字符顏色
越復雜的東西越要封裝,
當我們的額設置的東西只要一次的時候,而且使用的xib我們可以在aweakFromNib中設置,
當我們找這個占字符的先去頭文件查找,attributePlaceholderString
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
dic[NSForegroundColorAttributeName] = [UIColor whiteColor];
self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:self.placeholder attributes:dic];
快速設置占字符顏色
我們可以使用小面包將頁面分析,查看textfied的內(nèi)容,可以看到
屏幕快照 2019-10-22 上午11.07.31.png
這是看可以看懂field的內(nèi)部,這是我們可以通過kvc進行設置。但是需要知道屬性名字,首先,要獲取屬性名,1可以通過runtime來打印,2,可以用斷點,用斷點我們可以查看到

屏幕快照 2019-10-22 上午11.17.50.png

屏幕快照 2019-10-22 上午11.18.21.png
他有一個placeholderLabel的屬性
這時候我們就可以利用KVC進行設置
UILabel *placeholderLabel = [self valueForKey:@"placeholderLabel"];
placeholderLabel.textColor = [UIColor whiteColor];
如果我們想以后都使用可以自定義一個分類
.h
@property UIColor *placeholderColor;
.m
- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
UILabel *placeholderLabel = [self valueForKey:@"placeholderLabel"];
placeholderLabel.textColor = placeholderColor;
}
- (UIColor *)placeholderColor
{
return nil;
}
runtime設置
使用上面的設置方式,要特別注意設置的順序需要先設置占位文字,在設置顏色,因為這個label是懶加載,如果我們沒有設置文字的話,就為nil這時候我們設置顏色是沒有效果的。所以我門完善一下。使用runtime。修改placeholder的set方法,和我們自己的設置的方法交換實現(xiàn).
+ (void)load
{
// setPlaceholder
Method setPlaceholderMethod = class_getInstanceMethod(self, @selector(setPlaceholder:));
Method setXmg_PlaceholderMethod = class_getInstanceMethod(self, @selector(setXmg_Placeholder:));
method_exchangeImplementations(setPlaceholderMethod, setXmg_PlaceholderMethod);
}
- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
// 給成員屬性賦值 runtime給系統(tǒng)的類添加成員屬性
// 添加成員屬性
objc_setAssociatedObject(self, @"placeholderColor", placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
// 獲取占位文字label控件
UILabel *placeholderLabel = [self valueForKey:@"placeholderLabel"];
// 設置占位文字顏色
placeholderLabel.textColor = placeholderColor;
}
- (UIColor *)placeholderColor
{
return objc_getAssociatedObject(self, @"placeholderColor");
}
// 設置占位文字
// 設置占位文字顏色
- (void)setXmg_Placeholder:(NSString *)placeholder
{
[self setXmg_Placeholder:placeholder];
self.placeholderColor = self.placeholderColor;
}