用runtime给系统类添加属性

#import "UITextField+Placeholder.h"
#import <objc/message.h>

@implementation UITextField (Placeholder)

+(void)load{

    Method setPlaceholder = class_getInstanceMethod(self, @selector(setPlaceholder:));
    Method setQLCPlaceholder = class_getInstanceMethod(self, @selector(setQLCPlaceholder:));
    //交换方法实现
    method_exchangeImplementations(setPlaceholder, setQLCPlaceholder);
}


-(void)setPlaceholderColor:(UIColor *)placeholderColor{
    
    objc_setAssociatedObject(self, @"placeholderColor", placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    UILabel *placeholderLabel = [self valueForKey:@"placeholderLabel"];
    //方法实现:首先找有没有这样的get方法,没有则继续找placeholderLabel这个成员属性,还没有则接着找_placeholderLabel

    placeholderLabel.textColor = placeholderColor;
}

-(UIColor *)placeholderColor{
    
    return objc_getAssociatedObject(self, @"placeholderColor");
}

-(void)setQLCPlaceholder:(NSString *)placeholder{
    [self setQLCPlaceholder:placeholder];
    self.placeholderColor = self.placeholderColor;
    
}

 

posted @ 2017-05-14 23:36  Sivek_lin  阅读(211)  评论(0编辑  收藏  举报