给分类增加属性
关于分类的创建这里就不扯了,咱们直接开干
这里以文本看占位文字颜色为例
一:简单方式(关键技术:KVC)
1.在头文件定义一个属性
1 @property (nonatomic, strong) UIColor *placeholderColor; 2 /** 3 * 分类中只会产生属性对应Setter和Getter方法的声明,不会有实现,需要我们自己实现 4 */ 5 //-(void)setPlaceholderColor:(UIColor *)placeholderColor; 6 //-(UIColor *)placeholderColor;
2.定义一个静态常量,用于下面属性的设置
1 static NSString * const placeholderColorkey = @"placeholderLabel.textColor";
3.实现这个属性的setter和getter属性(在分类中系统不会帮我们实现的)
1 -(void)setPlaceholderColor:(UIColor *)placeholderColor 2 { 3 BOOL change = NO; 4 5 if (self.placeholder == nil) { 6 self.placeholder = @" "; 7 change = YES; 8 } 9 10 [self setValue:placeholderColor forKeyPath:placeholderColorkey]; 11 12 if (change) { 13 self.placeholder = nil; 14 } 15 } 16 17 -(UIColor *)placeholderColor 18 { 19 return [self valueForKeyPath:placeholderColorkey]; 20 }
二:装逼方式(关键技术:运行时)
1.在头文件定义一个属性
1 @property (nonatomic, strong) UIColor *placeholderColor;
2.导入运行时库
1 #import <objc/runtime.h>
实现setterg和getter方法使用管理对象技术实现数据的关联
1 -(void)setPlaceholderColor:(UIColor *)placeholderColor 2 { 3 /** 4 * 关联对象:1 5 */ 6 objc_setAssociatedObject(self, &placeholderColorkey, placeholderColor, OBJC_ASSOCIATION_ASSIGN); 7 } 8 9 -(UIColor *)placeholderColor 10 { 11 /** 12 * 关联对象:2 13 */ 14 return objc_getAssociatedObject(self, &placeholderColorkey); 15 }
关于更多运行时相关技术情查看笔者前面的相关文章
时间: 2024-10-06 19:41:08