美文网首页
runtime 运行时动态添加占位文字颜色:UITextFiel

runtime 运行时动态添加占位文字颜色:UITextFiel

作者: KNSky | 来源:发表于2016-04-08 23:46 被阅读43次

    帮助大家更好的理解运行时动态方法, 这里能设定成一个UITextFied的分类,以后调用这个分类 就能很灵活的在任何地方改变占位文字的颜色了

    特点:

    1.取出系统的私有变量
    2.运行时动态改变颜色
    3.运行时交换方法

    这里.h文件
     
    
    @interface UITextField (PlaceHolder)
    
    @property UIColor*  placeholderColor;
    
    @end
    
    /*********************************************/
    下面.m文件
    #import <objc/message.h>
    
    @implementation UITextField (PlaceHolder)
    
    //开始就进行方法交换
    +(void)load{
        
        
        //获取自己设定的 setKn_PlaceHolder 方法
        Method setKn_PlaceholderMehtod = class_getInstanceMethod(self, @selector(setKn_PlaceHolder:));
        
        //获取自己设定的 系统的 setPlaceholder 方法
        Method setPlaceholderMethod = class_getInstanceMethod(self, @selector(setPlaceholder:));
        
        //对2个方法进行交换
        method_exchangeImplementations( setKn_PlaceholderMehtod, setPlaceholderMethod);
        
       //交换方法后 setKn_PlaceHolder 就变成 setPlaceholder
       //交换方法后 setPlaceholder    就变成 setKn_PlaceHolder
    }
    
    //先设置一个有这样功能的方法
    -(void)setKn_PlaceHolder:(NSString *) placeholder{
        
        //开始用系统的 设置占位文字
    //    [self setPlaceholder:placeholder];
        
        
        //交换方法后 setPlaceholder    就变成 setKn_PlaceHolder
        //所以用setKn_PlaceHolder
        [self setKn_PlaceHolder:placeholder];
        
        //设置占位文字颜色
        [self setPlaceholderColor:self.placeholderColor];
        
    }
    
    -(void)setPlaceholderColor:(UIColor *)placeholderColor{
     
        //先保存占位文字的颜色
        objc_setAssociatedObject(self, @"placeholderColor", placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        
        //用到的时候在给他
        
        
        //获取自带的私有控件,取出系统私有属性
        UILabel *placeholderLabel=[self valueForKey:@"placeholderLabel"];
        
        //设置颜色
        placeholderLabel.textColor=placeholderColor;
    }
    
    -(UIColor *)placeholderColor{
        
        //取用的时候把颜色给他
        return objc_getAssociatedObject(self, @"placeholderColor");
    }
    
    @end
    
    
    

    我是KNSky,愿您每天开心 _

    相关文章

      网友评论

          本文标题:runtime 运行时动态添加占位文字颜色:UITextFiel

          本文链接:https://www.haomeiwen.com/subject/ganvlttx.html