UITextField 关于placeholder属性的用法
来源:互联网 发布:linux停到oracle服务 编辑:程序博客网 时间:2024/04/29 09:45
关于UITextField设置占位文字,最常用的就是直接赋值,如下:
textField.placeholder = @"请输入用户名";
但是,在我们的开发中,会遇到各种各样的需求,这就需要我们了解placeholder这个属性更多的作用,下面我列举了一些:例如修改占位文字和光标的颜色,大小等…
一、设置占位文字的颜色
方法一 : 利用富文本
/** 手机号输入框 */@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设置属性
// 设置占位文字的颜色为红色[textField 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]];}
二、设置光标颜色
// 设置光标的颜色textField.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:
0 0
- UITextField 关于placeholder属性的用法
- 关于UITextField和UITextView的placeholder
- UITextField属性--PlaceHolder颜色自定义
- UITextField属性--PlaceHolder颜色自定义
- UITextField属性--PlaceHolder颜色自定义
- 为UITextField添加placeholder属性
- UITextField的属性和用法.
- UITextField 的属性和用法
- 关于表单元素input的placeholder属性
- 怎样自定义UITextField的placeholder
- UITextField 设置placeholder的颜色
- 修改UITextField的placeholder颜色
- 修改UITextField的placeholder颜色
- 修改UITextField的placeholder颜色
- 修改UITextField的placeholder颜色
- 修改UITextField的placeholder颜色
- 修改UITextField的placeholder颜色
- 修改UITextField的placeholder颜色
- Svn创建及合并分支
- MongoDB查询两个属性不相等
- Leetcode题解 371. Sum of Two Integers
- Java性能优化的9大工具
- 《文件传输基础----Java IO流---《二》》
- UITextField 关于placeholder属性的用法
- Android UI性能优化详解
- ios用PlistBuddy修改Plist文件
- NOIP 2013 货车运输 TYVJ 3115
- C语言面试题
- JVM调优总结 -Xms -Xmx -Xmn -Xss等
- NodeJS学习系列课程笔记(NodeJS util工具类相关使用方法)
- UE4中创建vive控制器交互
- 用python写一个简单的推荐系统