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 <objc/runtime.h>

@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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,794评论 1 32
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型...
    龍飝阅读 6,575评论 0 12
  • 今天一女性朋友在圈里发了一段话,意思是说,自己吃完饭下楼溜达,在一辆车前停下来了,把手机放到车窗上玩起手机了,并且...
    冰心玉壶0516阅读 1,150评论 0 0
  • 荀子曰:“人无礼则不生,事无礼则不成,国无礼则不宁。”古人知礼、守礼,礼是封建社会的基本道德准则。虽然现代社会中不...
    小雯子的杂货铺阅读 4,367评论 0 2
  • tensorflow环境和python的环境不同
    年画儿阅读 949评论 0 0