设置textField里的placeHoder颜色

1.点进去类里面找属性
2.猜测可能是个label,在小面包里看,打断点UITextField *text查看属性,搜索label,找到_placehoderLabel,使用KVC找到,设置颜色
3.
使用分类设置一个属性,实现它的set方法,调用这个set方法就可以设置颜色,将2中的代码写在set方法里。
使用这个分类有一个BUG,如果这样写
self.testText.placeColor = [UIColor greenColor];
    self.testText.placeholder = @"234";
这个方法就不能成功。
必须先能够获取到系统的label在设置颜色才能够成功,如果先设置颜色后给系统label设置属性间接获取label,这个方法就不能成功。
思路:需要给系统添加一个属性,然后调用系统的属性走自己的方法
当我们想如果能够给系统添加一个属性,在分类中使用runtime。

还需要利用runtime去交换系统和我们自定义的方法

关键代码:

#import "UITextField+LSPlaceHoderColor.h"

#import <objc/message.h>


@implementation UITextField (LSPlaceHoderColor)

+ (void)load{

    Method method1 = class_getInstanceMethod(self, @selector(setPlaceholder:));

    Method method2 = class_getInstanceMethod(self, @selector(setLS_Placeholder:));

    method_exchangeImplementations(method1, method2);

}

- (void)setPlaceColor:(UIColor *)placeColor{

    

    objc_setAssociatedObject(self, @"placeholderColor", placeColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    UILabel *placeholderLabel = [self valueForKey:@"_placeholderLabel"];

    placeholderLabel.textColor = placeColor;

}

//不获取颜色,所以返回nil

//- (UIColor *)placeColor{

//    return nil;

//}


//这时候不能返回nil了,要返回runtime添加的属性这样self.placeColor = self.placeColor;中的get方法才能调用到

- (UIColor *)placeColor{

    return objc_getAssociatedObject(self, @"placeholderColor");

}

- (void)setLS_Placeholder:(NSString *)lsplaceholder{

    //调用自己的就是调用系统的

    [self setLS_Placeholder:lsplaceholder];

//    self.placeholder = lsplaceholder;

    self.placeColor = self.placeColor;

}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值