通过富文本改变UITextFieldPlaceholder颜色

1、通过属性

a、   //文字属性(一般)

    NSMutableDictionary *attrs = [NSMutableDictionary dictionary];

   attrs[NSForegroundColorAttributeName] = [UIColor blueColor];

  NSAttributedString *placeholderStr = [[NSAttributedString alloc] initWithString:@"手机号" attributes:attrs];

    self.phoneTextField.attributedPlaceholder = placeholderStr;

 b、稍微高级一点

    NSMutableAttributedString *placeholder = [[NSMutableAttributedString alloc] initWithString:@"手机号"];

    [placeholder setAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor],

                                 NSFontAttributeName : [UIFont systemFontOfSize:20]

                                 } range:NSMakeRange(0, 1)];

    [placeholder setAttributes:@{NSForegroundColorAttributeName : [UIColor blueColor]} range:NSMakeRange(1, 1)];

    [placeholder setAttributes:@{NSForegroundColorAttributeName : [UIColor yellowColor]} range:NSMakeRange(2, 1)];

    self.phoneTextField.attributedPlaceholder = placeholder;

 

二、通过重写UITextField的方法

继承UITextField的类,

- (void)drawPlaceholderInRect:(CGRect)rect

{

    [self.placeholder drawInRect:CGRectMake(10, 10, 10, 1) withAttributes:@{

                                                                           NSForegroundColorAttributeName :[UIColor blueColor],

                                                                           NSFontAttributeName :[UIFont systemFontOfSize:10]

                                                                           }];

}

使用的时候,如果是xib创建的textField,就吧xib中的textField的类名改成这个自定义的,如果是代码创建,就用这个自定义的textField去创建。

三、或者在UITextField中放个label,输入时隐藏,也可以达到效果

四、通过Runtime更改

 运行时(Runtime):

 * 苹果官方一套C语言库

 * 能做很多底层操作(比如访问隐藏的一些成员变量\成员方法....)

 

#import "LHBTestTextField.h"

//要用运行时,必须导入该库

#import <objc/runtime.h>

static NSString * const LHBPlacerholderColorKeyPath = @"_placeholderLabel.textColor";

@implementation LHBTestTextField

//让代码创建的TextField的也可以用

- (instancetype)initWithFrame:(CGRect)frame

{

    if (self = [super initWithFrame:frame]) {

        

    }

    return self;

}

 - (void)awakeFromNib

{

//    可以改

//    UILabel *plcaeholderLabel = [self valueForKeyPath:@"_placeholderLabel"];

//    plcaeholderLabel.textColor = [UIColor blueColor];

   

//    或者一句代码

//    [self setValue:[UIColor yellowColor] forKeyPath:@"_placeholderLabel.textColor"];

    

//    设置光标颜色

//    self.tintColor = [UIColor orangeColor];

//    self.tintColor = self.textColor;//和文字颜色一致

        

    //RiderGirl中的应用

    [self resignFirstResponder];

    self.tintColor = [UIColor yellowColor];

}

#pragma mark - 当输入框聚焦时,调用,更改颜色。重写第一响应方法

- (BOOL)becomeFirstResponder

{

    //成为第一响应,就修改placeholder的文字颜色

    [self setValue:self.textColor forKeyPath:LHBPlacerholderColorKeyPath];

    return [super becomeFirstResponder];

}

 

#pragma mark - 当焦点离开输入框时,调用,更改颜色。重写失去焦点方法

- (BOOL)resignFirstResponder

{

    [self setValue:[UIColor grayColor] forKeyPath:LHBPlacerholderColorKeyPath];

    return [super resignFirstResponder];

}

+ (void)initialize

{

//    [self getIvars];

}

 

+ (void)getProperties

{

    unsigned int count = 0;

    //相当于拷贝出来,要手动管理内存

    objc_property_t *propreties = class_copyPropertyList([UITextField class], &count);

    for (NSInteger i=0; i<count; i++) {

        //取出属性

        objc_property_t property = propreties[i];

        //打印属性名字

        NSLog(@"%s --- %s",property_getName(property),property_getAttributes(property));

    }

    //释放内存

    free(propreties);

 

}

 

+ (void)getIvars

{

    unsigned int count = 0;

    //相当于拷贝所有成员变量,要手动管理内存

    Ivar *ivars = class_copyIvarList([UITextField class], &count);

    for (NSInteger i=0; i<count; i++) {

        //取出成员变量

//        Ivar ivar = *(ivars + i);

        Ivar ivar = ivars[i];//指向的是数组首元素时,可以当数组来用

       

        //打印一下看看UITextField里面隐藏的成员变量的名字

        NSLog(@"%s --- %s",ivar_getName(ivar),ivar_getTypeEncoding(ivar));

    }

    //释放内存

    free(ivars);

      //会打印出一堆成员变量的名字,拿到这个成员变量的名字,可以通过kvc来更改内部属性,现在可以拿到_placeholderLabel

}

 

#pragma mark - 该方法只能实现高亮时更改placeholder的颜色。焦点离开时暂时改不了

//- (void)setHighlighted:(BOOL)highlighted

//{

//    [self setValue:self.textColor forKeyPath:LHBPlacerholderColorKeyPath];

//}

 

 

#pragma mark - 写框架的话,可以在外部加一属性,重写set方法,方便外部更改

 - (void)setPlaceholderColor:(UIColor *)placeholderColor

{

    _placeholderColor = placeholderColor;

    [self setValue:placeholderColor forKeyPath:LHBPlacerholderColorKeyPath];

}

转载于:https://www.cnblogs.com/sunflower-lhb/p/5573008.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阻塞/非阻塞/同步/异步方法和多线程的关系?没有任何关系,俩不挨着

1.阻塞非阻塞异步同步是针对方法说的&#xff0c;是评判一个方法运行状态的。和多线程完全两个级别。 2.阻塞非阻塞异步同步是针对方法说的&#xff0c;是评判一个方法运行状态的。和多线程完全两个级别。 3.阻塞非阻塞异步同步是针对方法说的&#xff0c;是评判一个方法运行状…

mysql备份 where_MySQL备份与还原

1.mysqldumpmysqlbinlog介绍mysqldump备份结合binlog日志恢复。MySQL备份一般采取全库备份加日志备份的方式&#xff0c;例如每天执行一次全备份&#xff0c;每小时执行一次二进制日志备份&#xff0c;这样在MySQL故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志…

JMeter:负载测试关系数据库

Apache JMeter是完全使用Java编写的性能测试工具。 可以在请求/响应模型上运行的任何应用程序都可以使用JMeter进行负载测试。 关系数据库也不例外&#xff1a;接收sql查询&#xff0c;执行它们并返回执行结果。 我将向您展示使用JMeter的图形用户界面设置测试方案有多么容易。…

new: Set up a window

Nehe的教程确实太老了&#xff0c;不过我认为它也能够让我了解OpenGL3.2以前的管线渲染模式&#xff0c;即使它在现在已经不常见了。因为想要了解&#xff0c;所以我还是会看完Nehe的教程。 现在这是一个新的教程 - JoeyDeVries的教程&#xff0c;可以说是网上最好的OpenGL教程…

Python全栈开发:socket

Socket socket通常也称作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix&#xff0c;而Unix/Linux基本哲学之一就是“一切皆文件”&…

oracle sga pga mysql_修改Oracle数据库SGA和PGA大小

SGA的大小&#xff1a;一般物理内存20%用作操作系统保留&#xff0c;其他80%用于数据库。SGA普通数据库可以分配40%-60%之间&#xff0c;PGA可以分配20%-40%之间。1、以dba身份登录并查看SGA信息&#xff1a;SQL>show parameter sga&#xff1b;查看PGA信息&#xff1a;SQL&…

NetBeans 7.1:创建自定义提示

我已经在帖子中介绍了一些我最喜欢的NetBeans提示 &#xff0c;这些信息是用于使Java代码现代化的七个NetBeans提示和七个不可或缺的NetBeans Java提示 。 这两个帖子中涉及的十四个提示仅占NetBeans支持的“即开即用”提示总数的一小部分。 但是&#xff0c;由于NetBeans 7.1使…

今年暑假不AC

Problem Description “今年暑假不AC&#xff1f;”“是的。”“那你干什么呢&#xff1f;”“看世界杯呀&#xff0c;笨蛋&#xff01;”“#$%^&*%...”确实如此&#xff0c;世界杯来了&#xff0c;球迷的节日也来了&#xff0c;估计很多ACMer也会抛开电脑&#xff0c;奔向…

qregexp括号匹配_转:Qt的正则表达式和QRegExp

考虑一下我们经常遇到的问题&#xff0c;比如gemfield想从青岛之光读书(www.civilnet.cn/book)中找一个关键的电话号码&#xff0c;通常第一步就是将书中所有的电话号码查找出来放在手边。那么怎么拟定查询条件呢&#xff1f;电话的格式有如下几种&#xff1a;01088888888010 8…

具有Tron效果的JavaFX 2 Form

这是一个具有TRON效果的简单JavaFX登录表单。 在此示例中&#xff0c;我使用CSS设置TextField和Button的样式。 这是CSS和Effect代码的片段&#xff1a; .text-field{-fx-background-color: transparent;-fx-border-color: #00CCFF;-fx-text-fill: white; }.password-field{-fx…

Spring注解Annotion详解

概述 注释配置相对于 XML 配置具有很多的优势&#xff1a; 它可以充分利用 Java 的反射机制获取类结构信息&#xff0c;这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时&#xff0c;我们就不需要指定 PO 的属性名、类型等信息&#xff0c;如果关系表字段和 PO…

CopyOnWrite容器

1.简介 1.CopyOnWrite是程序优化的策略,当共享的内容需要修改时,复制出去一份进行修改,然后将原来的引用指向修改完的 2.java并发包(java.util.concurrent)中CopyOnWriteArrayList和CopyOnWriteArraySet实现了这个并发容器 3.好处:因为写时是在复制的一份上操作,所以可以并发的…

Akka的字数统计MapReduce

在我与Akka的日常工作中&#xff0c;我最近写了一个字数映射表简化示例。 本示例实现了Map Reduce模型&#xff0c;该模型非常适合横向扩展设计方法。 流 客户端系统&#xff08;FileReadActor&#xff09;读取文本文件&#xff0c;并将每一行文本作为消息发送给ClientActor。…

mysql如何设置多节点_详细介绍Mysql5.7从节点设置多线程主从复制的办法

软件安装&#xff1a;装机软件必备包SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集&#xff0c;是一种功能齐全的数据库语言。在使用它时&#xff0c;只需要发出“做什么”的命令&#xff0c;“怎么做”是不用使用者考虑的。SQL功…

python学习笔记 可变参数关键字参数**kw相关学习

在Python中可以定义可变参数&#xff0c;顾名思义&#xff0c;可变参数就是传入参数是可变的。可以是任意个&#xff0c;以一个简单的数学编程为例&#xff0c;计算 sum a * a b * b .....z * z 函数定义可以如下&#xff1a; def getsum(num) :sum 0for n in num :sum su…

Struts2之环境配置

在学习struts2之前&#xff0c;首先我们要明白使用struts2的目的是什么&#xff1f;它能给我们带来什么样的好处&#xff1f; 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的好处就不在提了。 技术优势 Struts2有两方面的技术优势&#xff0c;…

mysql数据库备份shell_mysql数据库备份shell脚本分享

#!/bin/bash#2020年04月27日15:56:21#auto backup mysql db#by author www.cnbugs.com########################SQL_DB"$*"SQL_USR"backup"SQL_PWD"123456"SQL_CMD"/usr/bin/mysqldump"SQL_DIR"/data/backup/date %F"if [ $…

懒惰的JSF Primefaces数据表分页–第1部分

今天&#xff0c;我们将使用带有视图范围的托管bean的惰性列表进行JSF数据表分页。 这些单词/表达式是什么意思&#xff1f; 如今&#xff0c;有几个JSF框架为数据表提供现成的分页&#xff0c;列排序器和其他功能。 今天&#xff0c;我们将使用Primefaces数据表。 通常&#…

java 动态增加定时任务

直接上代码 import org.apache.tools.ant.util.DateUtils; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory;import java.util.Calendar; import…

基于JavaFX的SimpleDateFormat演示程序

对于使用Java Date进行格式化的新手甚至对于使用Java Date进行格式化的有经验的Java开发人员而言&#xff0c;可能有些棘手的事情是使用SimpleDateFormat规范日期/时间格式。 SimpleDateFormat的基于类级别的Javadoc的文档非常详尽&#xff0c;涵盖了表示日期/时间的各个组成部…