自定义文本框占位颜色和runtime

请耐心看完这篇文章,你会发现惊喜。当我看到这个需求的时候,首先脑海里就有个思路,既然和系统给的不一样,那肯定就要自定义了,最开始我并不知道怎么改,所以我点进去,UITextField类里面,既然是占位颜色,所以我就搜索place,就发现了

这两个属性,想都不用想,肯定我们对第二个属性进行操作,在这里牵扯到了小逻辑的处理,就是要监听开始编辑和结束编辑的状态,用什么监听呢?

开发中监听事件用到三种:1.代理 2.通知 3.target

用代理?代理中有一个原则:永远不要自己成为自己的代理,我们在自定义的textField中设置代理这不搞笑呢,通知?跨多界面传值一般才用,所以这里用 target最合适

功能实现了,可是呢,作为开发人员,改个颜色写这么多代码有些不恰当吧,所以又想到了什么?是不是想到了给自定义的类添加一个placeholder的属性,给类添加属性,不错就是分类了。

分类中是有set和get方法的,只是没实现没有有带下划线的属性而已,写好以后,直接在自定义的类里面直接就

self.lsPlacehoder = self.placeholder;

这样可否简单多了,但是还是有点遗憾,这样很不直观,不太能够读懂我们最希望的就是直接self.placeholder = [UIColor WhiteColor]这样是不是就简单粗暴了,

所以继续观察,占位文字猜测应该是一个label,我们使用

观察

这就是我们想要的控件UITextFieldLabel,所以我们确定了我们需要一个label的属性,点击进去看发现,苹果官方只是声明了一下,并没有给我们详细说明里面的属性,猜测是隐藏的私有属性,所以如何获得label的属性呢,这里用比较简单的方式打断点,runtime也能获得属性,但是太麻烦,而且什么都不知道的情况下不利于锁定,怎么简单怎么来

现在知道设置占位属性真正的label,是_placeholderLabel,所以获取这个label得用KVC

UILabel *placehoderlabel = [self valueForKey:@"placeholderLabel"];

placehoderlabel.textColor = [UIColor lightGrayColor];

一点问题没有,这时候哈哈哈,可以在分类里写,外界可以直接设置颜色了

分类中

自定义textField类中

这样就可以了,但是呢小伙伴可以测试一下,这样写是有BUG的,经过测试发现我们只有先设置占位文字,后设置占位颜色才可以,调换顺序后是不行的,查询了一些解决方法,发现因为OC中控件都是懒加载,我们要想完美的解决这个问题,必须事先将占位颜色保存起来,等到用到的时候再去调用,想到这,给系统添加属性和方法第一个反应就是runtime运行时

做一个小测试

这样调用lsPlacehoder就可以实现设置文字和颜色无序了,可是这样调用不是我们的终极目标,我们希望直接调用placeholder直接设置,所以用runtime交换两个方法,

哈哈完美这样的话,我们不管怎么设置文字或者颜色,都可以设置上啦。

时间: 2024-08-15 23:46:26

自定义文本框占位颜色和runtime的相关文章

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

一.登录模块的布局 将一整部分切割成若干部分来完成,如图分成了三部分来完成 设置顶部状态栏为白色的方法 二.设置文本框占位文字颜色 <1>方法一与方法二实现原理是同一种,都是通过设置placeholder的NSAttributeString来设置文字属性 方法二效果图: <2>第三种方法是通过RunTime找到隐藏的可以设置placeholder颜色的属性,通过KVC来赋值.RunTime会单独拿出来讲 三.按钮自定义,重新排列子控件的排列位置

运用一下 Runtime 修改文本框占位符的颜色

/** 运行时 :runtime 可以访问隐藏的一些属性**在这个代码中 修改 文本框占位符 的颜色 */ + (void)initialize { [self getIvars]; [self getProperties]; } //获取所有属性 + (void)getProperties { unsigned int count = 0; objc_property_t *properties = class_copyPropertyList([UITextField class], &co

axure自定义文本框样式

axure中的文本框是我们经常使用的元件,但它本身对样式的设置很有限,不能设置边框样式.阴影等,不能满足我们制作高保真原型的需求,本文给大家介绍一下结合矩形元件自定义文本框样式.(PS:此处的"高保真"指的是UI上的设计,对于原型保真程度的说明,请参考我的另一片文章<产品原型设计浅见>). 如果我们要制作下图这种圆角输入框,首先拖入一个文本框.一个矩形到设计区域,将矩形置于底层,调整矩形的大小能够刚刚包围住文本框,给矩形增加一点圆角,把矩形的颜色弄浅一点,我设置的色值是#9

wxpython 支持python语法高亮的自定义文本框控件的代码

在研发闲暇时间,把开发过程中比较重要的一些代码做个珍藏,下面的代码内容是关于wxpython 支持python语法高亮的自定义文本框控件的代码,应该是对大家也有用. import keywordimport wximport wx.stc as stcimport images #---------------------------------------------------------------------- demoText = """## This versio

百思不得姐第4天:文本框占位文字颜色

一:设置登录界面和注册界面的切换 #import "CQLoginViewController.h" #import "CQCustomTextField.h" @interface CQLoginViewController () @property (weak, nonatomic) IBOutlet NSLayoutConstraint *centerTopConstraints; @property (weak, nonatomic) IBOutlet UI

改变设置文本框占位文字和图片

如果我们想实现这种效果,点击相应的文本,占位文字显示高亮 ,而其他文本框非高亮 相应代码 #import <UIKit/UIKit.h> @interface XMGTextField : UITextField /** 颜色 */ @property(nonatomic,strong)UIColor *placeholderColor; @end #import "XMGTextField.h" #import <objc/runtime.h> static

JavaScript 自定义文本框光标——初级版

文本框(input或textarea)的光标无法修改样式(除了通过color修改光标颜色).但笔者希望个人创建自己的网站时,文本框的光标有属于自己的风格.所以,尝试模拟文本框的光标,设计有自己风格的光标.以下是笔者个人的想法. [************************基本思路***************************] 对于键盘操作来说,光标的基本操作不外乎最基本的三个键:左箭头(left arrow).右箭头(right arrow)和退格键(backspace). 左箭

Winform 自定义文本框

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TomWinform.CustomerControl

VS2012窗口及编辑文本框背景颜色变黑

1.工具->选项 2.环境->常规->深色