美文网首页
UITextField-修改占位文字和光标的颜色,大小

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

作者: Vampire丶Lv | 来源:发表于2016-05-26 11:23 被阅读222次

一.设置占位文字的颜色

方法一:利用富文本

/** 手机号输入框 */

@property(weak,nonatomic)IBOutletUITextField*phoneTextField;

- (void)viewDidLoad {   

[superviewDidLoad];// 创建一个富文本对象     NSMutableDictionary*attributes = [NSMutableDictionarydictionary];// 设置富文本对象的颜色attributes[NSForegroundColorAttributeName] = [UIColorwhiteColor];// 设置UITextField的占位文字  self.phoneTextField.attributedPlaceholder= [[NSAttributedStringalloc] initWithString:@"手机号"attributes:attributes];}

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

// 设置占位文字的颜色为红色(注意下面的'self'代表你要修改占位文字的UITextField控件)[selfsetValue:[UIColorredColor] forKeyPath:@"_placeholderLabel.textColor"];

注意:_placeholderLabel.textColor是不可乱写的哦,我们是怎么获取到这个属性的呢?请看下文:

// 只调用一次(自定义UITextField)+ (void)initialize {    [selfgetIvars];}// 获取私有变量名称+ (void)getIvars {unsignedintcount =0;    Ivar *ivars = class_copyIvarList([UITextFieldclass], &count);for(inti =0; i < count; i++) {        Ivar ivar = ivars[i];NSLog(@"%s----%s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));    }}

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

完整代码:自定义的UITextField,获取到焦点(编辑状态)的时候是白色,失去焦点(非编辑状态)的时候是灰色:

#import"YCTextField.h"      #import#define YCplaceholderTextColor @"_placeholderLabel.textColor"         

@implementationYCTextField+ (void)initialize {    [selfgetIvars];}// 获取私有变量名称

+ (void)getIvars {unsignedintcount =0;     Ivar *ivars = class_copyIvarList([UITextFieldclass], &count);for(inti =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,设置占位文字的颜色[selfsetValue:self.textColorforKeyPath:YCplaceholderTextColor];return[superbecomeFirstResponder];}// 失去焦点- (BOOL)resignFirstResponder {// 利用运行时获取key,设置占位文字的颜色[selfsetValue:[UIColorgrayColor] forKeyPath:YCplaceholderTextColor];return[superresignFirstResponder];}@end

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

- (void)drawPlaceholderInRect:(CGRect)rect{    [[UIColororangeColor] set];    [self.placeholderdrawInRect:rect withFont:[UIFontsystemFontOfSize:20]];}

二.设置光标颜色

第一种: [[UITextField appearance]setTintColor:[UIColor blackColor]];

这种方法将影响所有TextField

第二种: 设置光标的颜色self.tintColor= [UIColorredColor];

三.设置占位文字的偏移

重写-(CGRect)placeholderRectForBounds:(CGRect)bounds;方法

可以用来设置光标与占位的间距

//控制placeHolder的位置,左右缩20-(CGRect)placeholderRectForBounds:(CGRect)bounds{//return CGRectInset(bounds, 20, 0);CGRectinset =CGRectMake(bounds.origin.x+50, bounds.origin.y, bounds.size.width-10, bounds.size.height);//更好理解些returninset;}

扩充:系统还提供了很多类似的方法

– textRectForBounds:  //重写来重置文字区域

– drawTextInRect:       //改变绘文字属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了.

– placeholderRectForBounds:  //重写来重置占位符区域

– drawPlaceholderInRect:  //重写改变绘制占位符属性.重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了

– borderRectForBounds:  //重写来重置边缘区域

– editingRectForBounds:  //重写来重置编辑区域

– clearButtonRectForBounds:  //重写来重置clearButton位置,改变size可能导致button的图片失真

– leftViewRectForBounds:

– rightViewRectForBounds:

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/rufxdttx.html