UITextField 的私有属性 _placeholderLabel 被禁止访问了

[_textField setValue:self.placeholderColor forKeyPath:@"_placeholderLabel.textColor"];
如果你的代码通过 KVC 方式修改私有属性,有 Crash 风险。

解决问题

对UITextField创建一个新的分类,例如:

//h文件
UITextField+Placeholder.h
@interface UITextField (Placeholder)
- (void)setPlaceholderColor:(UIColor *)color;
@end
//下面为m文件
#import "UITextField+Placeholder.h"
#import 

@implementation UITextField (Placeholder)

- (void)setPlaceholderColor:(UIColor *)color{
    Ivar ivar =  class_getInstanceVariable([UITextField class], "_placeholderLabel");
    UILabel *placeholderLabel = object_getIvar(self, ivar);
    placeholderLabel.textColor = color;
}
//使用
[self.textFiled setPlaceholderColor:[UIColor redColor]];

@end

这样项目中有多个地方使用就可以很快替换掉。

你可能感兴趣的:(UITextField 的私有属性 _placeholderLabel 被禁止访问了)