一.设置占位文字的颜色

方法一:利用富文本

/** 手机号输入框 */
@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]; }

方法二:利用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:

        原文链接:https://blog.csdn.net/u012907783/article/details/53157685

ios_UITextField-修改占位文字和光标的颜色,大小的更多相关文章

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

    一.设置占位文字的颜色 方法一:利用富文本 /** 手机号输入框 */ @property (weak, nonatomic) IBOutlet UITextField *phoneTextField ...

  2. iOS开发中设置UITextField的占位文字的颜色,和光标的颜色

    在iOS开发中,对于很多初学者而言,很有可能碰到需要修改UITextField的占位文字的颜色,以及当UITextField成为第一响应者后光标的颜色,那么下面小编就介绍一下修改占位文字和光标的颜色. ...

  3. 修改UITextField的占位文字颜色的三种层次

    层次一:利用富文本 // 描述占位文字属性 NSMutableDictionary *dict = [NSMutableDictionary dictionary] ; dict[NSForegrou ...

  4. iOS不得姐项目--登录模块的布局,设置文本框占位文字颜色,自定义内部控件竖直排列的按钮

    一.登录模块的布局 将一整部分切割成若干部分来完成,如图分成了三部分来完成 设置顶部状态栏为白色的方法 二.设置文本框占位文字颜色 <1>方法一与方法二实现原理是同一种,都是通过设置pla ...

  5. 修改Tooltip 文字提示 的背景色 箭头颜色

    3==>vue 鼠标右击<div @contextmenu.prevent="mouseRightClick">prevent是阻止鼠标的默认事件 4==> ...

  6. iOS修改TextField占位符颜色大小

    UITextField *addCtrolField = [[UITextField alloc]initWithFrame:CGRectMake(CGRectGetMaxX(rightTitleLa ...

  7. 简易封装一个带有占位文字的TextView

    在实际iOS应用开发中我们经常会用到类似于下图所示的界面,即带有占位文字的文本框:

  8. iOS开发小技巧--自定义带有占位文字的TextView(两种方式)

    自定义控件注意或框架注意:自己暴露在外面的属性,一定要重写setter,保证外界与内部的交互性 一.方案一:通过drawRect:方法将文字画到textView中,监听文字改变用的是通知中心(代理也可 ...

  9. Android 设置EditText光标Curso颜色及粗细

    在android的输入框里,如果要修改光标的颜色及粗细步骤如下两步即可搞定: 1.在资源文件drawable下新建一个光标控制color_cursor.xml <?xml version=&qu ...

随机推荐

  1. 新手用Python运行selenium的常见问题

    1.更换Python版本 打开pycharm,点击 file——setting——project项目名——project Interpreter,点击右侧的设置,如下图 选择新Python版本的安装路 ...

  2. java 面向对象(三十二):泛型一 泛型的理解

    1.泛型的概念所谓泛型,就是允许在定义类.接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型.这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量.创建对象时确定 ...

  3. redis(八):Redis 哈希(Hash)

    Redis 哈希(Hash) Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象. Redis 中每个 hash 可以存储 232 ...

  4. Configurate vim tool

    vim tool is a commom editor, for the sake of improving effeicient, it is necessary to configurate vi ...

  5. 简易防止U盘中毒

    1.将U盘插入电脑,打开u盘 2.在U盘里面新建一个文本文档,将文本文档重命名autorun.inf保存完成. 3.为了防止误删次文件可以将属性设为影藏,就完成了.

  6. linux中无法使用vim命令

    报:linux中  vim 不是内部指令! 解决: 1. rpm -qa | grep vim // 查看vim命令在什么软件包 出现 vim-minimal-7.4.160-4.el7.x86_64 ...

  7. springmvc 重定向到外网地址

    return  new ModelAndView(new RedirectView("http://www.baidu.com"));

  8. Jmeter操作MySQL数据库详解

    一.jmeter操作数据库的原理 jmeter不可直接操作数据库,必须通过驱动程序来间接操作,但如果数据库不是在本地而是云服务器上的话就需要通过网络来操作. jmeter通过驱动程序来完成对MySQL ...

  9. Web Security Academy ___XXE injection___Lab

    实验网站:https://portswigger.net/web-security/xxe XXE学习看一参考下面这篇文章,讲得很全: https://xz.aliyun.com/t/3357#toc ...

  10. Shell基本语法---if语句

    if语句 格式 #单分支 if [ 条件判断 ]; then 执行动作 fi if [ 条件判断 ]; then 执行动作 else 执行动作 fi #多分支 if [条件判断]; then 执行动作 ...