iOS使用runtime修改文本框(TextField)的占位文字颜色

前言

在大家平时的开发中,有时候会遇到背景深色的界面上需要添加TextField,TextField默认的占位颜色也是深灰色,比较难看清,这时候就需要修改展位文字的颜色,可是系统没有提供相应的方法,那么就需要我们自己来自定义了

修改后的效果

话不多说,下面上代码:

// .h文件

#import <UIKit/UIKit.h>

@interface UITextField (Placeholder)

@property UIColor *placeholderColor;

@end
// .m文件

#import "UITextField+Placeholder.h"

#import <objc/message.h>

NSString * const placeholderColorName = @"placeholderColor";

@implementation UITextField (Placeholder)

+ (void)load
{
 // 获取setPlaceholder
 Method setPlaceholder = class_getInstanceMethod(self, @selector(setPlaceholder:));
 // 获取bs_setPlaceholder
 Method bs_setPlaceholder = class_getInstanceMethod(self, @selector(bs_setPlaceholder:));

 // 交换方法
 method_exchangeImplementations(setPlaceholder, bs_setPlaceholder);
}

// OC最喜欢懒加载,用的的时候才会去加载

// 需要给系统UITextField添加属性,只能使用runtime

- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
 // 设置关联
 objc_setAssociatedObject(self,(__bridge const void *)(placeholderColorName), placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

 // 设置占位文字颜色
 UILabel *placeholderLabel = [self valueForKeyPath:@"placeholderLabel"];

 placeholderLabel.textColor = placeholderColor;

}

- (UIColor *)placeholderColor
{
 // 返回关联

 return objc_getAssociatedObject(self, (__bridge const void *)(placeholderColorName));
}

// 设置占位文字,并且设置占位文字颜色
- (void)bs_setPlaceholder:(NSString *)placeholder
{
 // 1.设置占位文字
 [self bs_setPlaceholder:placeholder];

 // 2.设置占位文字颜色
 self.placeholderColor = self.placeholderColor;

}

@end

总结

以上就是iOS使用runtime修改文本框占位文字颜色的全部内容,希望对大家开发IOS能有所帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • IOS 中runtime使用方法整理

    IOS 中runtime使用方法整理 做iOS的朋友都知道或听说runtime,这个东西很像java的反射机制,但功能远胜于java的反射.通过runtime我们可以动态的向一个类中添加属性.成员变量.方法,以及对其进行读写访问. 新建两个类ClassOne和ClassTwo #import <Foundation/Foundation.h> @interface ClassOne : NSObject{ NSString *_publicVar1; NSString *_publicVar2

  • IOS Object-C 中Runtime详解及实例代码

    IOS Object-C 中Runtime详解 最近了解了一下OC的Runtime,真的是OC中很强大的一个机制,看起来比较底层,但其实可以有很多活用的方式. 什么是Runtime 我们虽然是用Objective-C写的代码,其实在运行过程中都会被转化成C代码去执行.比如说OC的方法调用都会转成C函数 id objc_msgSend ( id self, SEL op, - ); 而OC中的对象其实在Runtime中都会用结构体来表示,这个结构体中包含了类名.成员变量列表.方法列表.协议列表.缓

  • 总结iOS中runtime的使用

    做iOS的朋友都知道或听说runtime,这个东西很像java的反射机制,但功能远胜于java的反射.通过runtime我们可以动态的向一个类中添加属性.成员变量.方法,以及对其进行读写访问. 一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候 的一些机制,其中最主要的是消息机制. 对于C语言,函数的调用在编译的时候会决定调用哪个函数. 对于OC的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称 找到对应的

  • iOS runtime知识梳理

    一.runtime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C语言,函数的调用在编译的时候会决定调用哪个函数. 对于OC的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用. 事实证明: 在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要声明过就不会报错. 在编译阶段,C语言调用未实现的函数就会报错. 二.runtime作用 1.发送消息 ▪ 方法

  • iOS runtime forwardInvocation详解及整理

     iOS runtime forwardInvocation详解 代码: TestModel - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { if(aSelector == @selector(testMethod)) { return [NSMethodSignature signatureWithObjCTypes:"v@:"]; } return nil; } -(void)forwardInv

  • iOS使用runtime修改文本框(TextField)的占位文字颜色

    前言 在大家平时的开发中,有时候会遇到背景深色的界面上需要添加TextField,TextField默认的占位颜色也是深灰色,比较难看清,这时候就需要修改展位文字的颜色,可是系统没有提供相应的方法,那么就需要我们自己来自定义了 修改后的效果 话不多说,下面上代码: // .h文件 #import <UIKit/UIKit.h> @interface UITextField (Placeholder) @property UIColor *placeholderColor; @end // .m

  • ExtJS4的文本框(textField)使用正则表达式进行验证(Regex)的方法

    Extjs的Regex的验证属性分两种情况,一种是只有红色提示框:另一种是在提示框边会出现一个类似批注的提示信息,不过在页面加载时要加上Ext.QuickTips.init();提示框才能正常显示出来. 特别提示:在属性regex后要用 /^ 这里加正则 $/ 把上面的正则表达式包起来否则会报"缺少对象": 比如: 复制代码 代码如下: { xtype:'textfield', fieldLabel: '邮政编码', name:'postCode', regex: /^[1-9]\d{

  • wxPython修改文本框颜色过程解析

    这篇文章主要介绍了wxPython修改文本框颜色过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 由于工作需要使用wxPython实现一个美观的新增数据界面,这个界面上的文本框要像html中文本框一样可以设置边框颜色,和字体垂直居中. 当时也看了许多资料,发现wxpython并没有提供这样的修改方法,后来,花了一段时间,想出基于wxpython,自定义文本框控件. 具体思路如下: 1. 去除现有wxpython 的wx.TextCtrl控

  • 文本框点击时文字消失,失去焦点时文字出现

    文本框点击时文字消失,失去焦点时文字出现 function addListener(element,e,fn){ if(element.addEventListener){ element.addEventListener(e,fn,false); } else { element.attachEvent("on" + e,fn); } } var myinput = document.getElementById("myinput"); addListener(m

  • iOS改变UITextField占位文字颜色的三种方法

    有时,UITextField自带的占位文字的颜色太浅或者不满足需求,所以需要修改,而UITextField没有直接的属性去修改占位文字的颜色,所以只能通过其他间接方式去修改. 例如:系统默认的占位文字颜色太浅 需要加深颜色,或者改变颜色 示例: 核心代码 方法一:通过attributedPlaceholder属性修改占位文字颜色 CGFloat viewWidth = self.view.bounds.size.width; CGFloat textFieldX = 50; CGFloat te

  • 修改Android FloatingActionButton的title的文字颜色及背景颜色实例详解

    修改Android FloatingActionButton的title的文字颜色及背景颜色实例详解 首先看一张图片 我是在一个不错的开源的FloatingActionButton库基础上实现的,链接github开源库 参考图片的标记和代码里的注释.代码如下: <com.getbase.floatingactionbutton.FloatingActionsMenu android:id="@+id/fab_meau" android:layout_width="wra

  • extJs 文本框后面加上说明文字+下拉列表选中值后触发事件

    复制代码 代码如下: var showForm; function panelShowForm() { showForm=null; showForm = new Ext.FormPanel({ renderTo:"showPanel", region:'north', border:false, bodyBorder:false, frame:true, waitMsgTarget: true, labelAlign:'right', id:"showForm",

  • IOS开发中取消文本框输入时的小键盘

    首先在Interface Builder中选择TextFields,然后在Text Field Attributes中找到Text Input Traits,选择Return Key为done.OK 定义方法 - (IBAction) textFieldDoneEditing:(id)sender; //按下Done键关闭键盘 实现方法 复制代码 代码如下: //按完Done键以后关闭键盘 - (IBAction) textFieldDoneEditing:(id)sender { [sende

  • 使用Jquery实现点击文字后变成文本框且可修改

    使用Jquery实现点击文字变为文本框效果,可对文本框文字进行修改. 1.点击文字变为文本框 2.文本框自动全选文字 3.对文本框内容进行修改 4.点击文本框以外的地方文本框再次变为修改后的文字 5.同步更新SQL数据库内容 Html部分代码 复制代码 代码如下: <table width="200"> <tr> <td><b>ID</b></td> <td><b>名称</b>&

  • js实现鼠标点击文本框自动选中内容的方法

    本文实例讲述了js实现鼠标点击文本框自动选中内容的方法.分享给大家供大家参考.具体如下: 这里使用JS实现鼠标点击时自动选中文本框文本的效果,相信许多朋友都遇到这种功能的,就是当我们点击文本框的时候,文本框中默认的文字会被全部选中,这样当你输入的时候不用再去选择,省去了一些麻烦,提高了输入效率,用户肯定会喜欢这功能,那么实现的方法是怎么样呢?通过本代码你就搞明白了. 先来看看运行效果截图: 在线演示地址如下: http://demo.jb51.net/js/2015/js-mouse-click

随机推荐