• UITextField-修改占位文字和光标的颜色,大小


    一.设置占位文字的颜色

    方法一:利用富文本

    /** 手机号输入框 */
    @property (weak, nonatomic) IBOutlet UITextField *phoneTextField;
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // 创建一个富文本对象
        NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
        // 设置富文本对象的颜色
        attributes[NSForegroundColorAttributeName] = [UIColor whiteColor];
        // 设置UITextField的占位文字
        self.phoneTextField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"手机号" attributes:attributes];
    
    }

    修改字体后 可能placeHolder不对其 用下面的方法

    方法二:利用Runtime获取私有的属性名称,利用KVC设置属性

    // 设置占位文字的颜色为红色(注意下面的'self'代表你要修改占位文字的UITextField控件)
    [self setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];
    • 注意:_placeholderLabel.textColor是不可乱写的哦,我们是怎么获取到这个属性的呢?请看下文:
    // 只调用一次(自定义UITextField)
    + (void)initialize {
    
        [self getIvars];
    
    }
    
    // 获取私有变量名称
    + (void)getIvars {
    
        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));
        }
    }

    查看打印,找出可能的属性名称,试试便知;

    • 完整代码:自定义的UITextField,获取到焦点(编辑状态)的时候是白色,失去焦点(非编辑状态)的时候是灰色:
    #import "YCTextField.h"
    #import <objc/runtime.h>
    
    #define YCplaceholderTextColor @"_placeholderLabel.textColor"
    
    @implementation YCTextField
    
    + (void)initialize {
    
        [self getIvars];
    
    }
    
    // 获取私有变量名称
    + (void)getIvars {
    
        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));
        }
    }
    
    - (void)awakeFromNib {
    
        // 设置光标的颜色
        self.tintColor = self.textColor;
    }
    
    // 获取到焦点
    - (BOOL)becomeFirstResponder {
    
        // 利用运行时获取key,设置占位文字的颜色
        [self setValue:self.textColor forKeyPath:YCplaceholderTextColor];
    
        return [super becomeFirstResponder];
    }
    
    // 失去焦点
    - (BOOL)resignFirstResponder {
    
        // 利用运行时获取key,设置占位文字的颜色
        [self setValue:[UIColor grayColor] forKeyPath:YCplaceholderTextColor];
    
        return [super resignFirstResponder];
    }
    
    @end

    方法三.将占位文字上去(重写- (void)drawPlaceholderInRect:(CGRect)rect;)

    - (void)drawPlaceholderInRect:(CGRect)rect
    {
    
        [[UIColor orangeColor] set];
    
        [self.placeholder drawInRect:rect withFont:[UIFont systemFontOfSize:20]];
    }

    二.设置光标颜色

    // 设置光标的颜色
    self.tintColor = [UIColor redColor];

    三.设置占位文字的偏移

    • 重写-(CGRect)placeholderRectForBounds:(CGRect)bounds;方法
    • 可以用来设置光标与占位的间距

      //控制placeHolder的位置,左右缩20
      -(CGRect)placeholderRectForBounds:(CGRect)bounds
      {
      
        //return CGRectInset(bounds, 20, 0);
        CGRect inset = CGRectMake(bounds.origin.x+50, bounds.origin.y, bounds.size.width -10, bounds.size.height);//更好理解些
        return inset;
      }
    • 扩充:系统还提供了很多类似的方法
      • – textRectForBounds:  //重写来重置文字区域
      • – drawTextInRect:    //改变绘文字属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.
      • – placeholderRectForBounds:  //重写来重置占位符区域
      • – drawPlaceholderInRect:  //重写改变绘制占位符属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了
      • – borderRectForBounds:  //重写来重置边缘区域
      • – editingRectForBounds:  //重写来重置编辑区域
      • – clearButtonRectForBounds:  //重写来重置clearButton位置,改变size可能导致button的图片失真
      • – leftViewRectForBounds:
      • – rightViewRectForBounds:



    文/YotrolZ(简书作者)
    原文链接:http://www.jianshu.com/p/49b4eb97f41e
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 相关阅读:
    第七章 内部类与异常类
    2019 Multi-University Training Contest 1
    2019 Multi-University Training Contest 4
    支配树总结
    2019牛客多校第四场题解
    2019牛客多校第三场题解
    莫比乌斯函数总结
    2019牛客多校训练第二场题解
    2019牛客多校训练第一场题解
    洛谷P3069 [USACO13JAN]牛的阵容Cow Lineup(尺取法)
  • 原文地址:https://www.cnblogs.com/NSong/p/5486244.html
Copyright © 2020-2023  润新知