美文网首页
改变UITextField占位文字颜色的两种方法

改变UITextField占位文字颜色的两种方法

作者: 若素Smile | 来源:发表于2017-04-06 11:44 被阅读0次

    在开发中,我们许多时候要改变文本框的占位颜色,毕竟默认颜色有点丑😁而且在点亮非点亮状态颜色也不一样的时候,视觉效果更好,这就需要我们提供方便快捷的修改UITextField的占位文字颜色方法,下面我介绍自己比较熟悉的几种方法,并在最后提供个人开发中的小细节和技巧

    1.富文本属性

        // 创建字典描述富文本
        NSMutableDictionary *attr = [NSMutableDictionary dictionary];
        attr[NSForegroundColorAttributeName] = placeholderColor;
        
        // 创建富文本字符串
        NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:self.placeholder attributes:attr];
        
        // 设置富文本属性占位文字
        self.attributedPlaceholder = attrStr;
    

    2.利用Runtime获取私有的属性名称,利用KVC设置属性

        UILabel *label = [self valueForKeyPath:@"placeholderLabel"];
        
        label.textColor = placeholderColor;
      
     //两种方法等价 
     // [self setValue:placeholderColor forKeyPath:@"_placeholderLabel.textColor"];   
    

    关于通过runtime获得此属性代码如下:

    
        #import <objc/message.h> //需要包含此头文件
        unsigned int count = 0;
        
        Ivar *ivars = class_copyIvarList([UITextField class], &count);
        
        for (int i = 0; i < count; i++) {
            Ivar ivar = ivars[i];
            
            NSLog(@"%s----%s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));
        }
    
    // 其实除了runtime可以获取该私有属性,还可以通过断点调试,获得该属性
    

    使用中的细节和技巧

    我在开发中是将该方法写在UITextField的分类中,并通过property生成placeholderColor的setter,getter方法,这样我们在开发中就可以通过点语法调用该方法,更加方便.头文件代码如下:

    #import <UIKit/UIKit.h>
    
    @interface UITextField (Placeholder)
    
    @property  UIColor *placeholderColor;
    
    //- (void)setPlaceholderColor:(UIColor *)placeholderColor; 使用property生成方法,并通过点语法调用
    
    @end
    

    使用中有一个细节,就是在上面方法中进行优化,提高扩展性,以为如果我们在viewdidload方法中,先设置placeholderColor,在设置占位文字是无效的,也就说该方法扩展性不够好,因此,通过优化,最终的代码如下:

    - (void)setPlaceholderColor:(UIColor *)placeholderColor
    {
    // 需要注意的是此优化,放在富文本属性中无效
     if (self.placeholder.length == 0) {
            self.placeholder = @" ";
        }
     [self setValue:placeholderColor forKeyPath:@"_placeholderLabel.textColor"];
    }
    

    相关文章

      网友评论

          本文标题:改变UITextField占位文字颜色的两种方法

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