UITextField笔记

我们有时需要定制化UITextField对象的风格,可以添加许多不同的重写方法,来改变文本字段的显示行为。这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围,甚至修改placeHolder颜色,字体。

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

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

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

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

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

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

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

– leftViewRectForBounds:

– rightViewRectForBounds:

通过– drawPlaceholderInRect:方法可改变placeHolder颜色、字体,请看代码:

首先定义一个类CustomTextField让它继承UITextField实现以下方法即可:

//控制清除按钮的位置

-(CGRect)clearButtonRectForBounds:(CGRect)bounds

{

returnCGRectMake(bounds.origin.x+ bounds.size.width-50, bounds.origin.y+ bounds.size.height-20,16,16);

}

//控制placeHolder的位置,左右缩20

-(CGRect)placeholderRectForBounds:(CGRect)bounds

{

//return CGRectInset(bounds, 20, 0);

CGRectinset =CGRectMake(bounds.origin.x+100, bounds.origin.y, bounds.size.width-10, bounds.size.height);//更好理解些

returninset;

}

//控制显示文本的位置

-(CGRect)textRectForBounds:(CGRect)bounds

{

//return CGRectInset(bounds, 50, 0);

CGRectinset =CGRectMake(bounds.origin.x+190, bounds.origin.y, bounds.size.width-10, bounds.size.height);//更好理解些

returninset;

}

//控制编辑文本的位置

-(CGRect)editingRectForBounds:(CGRect)bounds

{

//return CGRectInset( bounds, 10 , 0 );

CGRectinset =CGRectMake(bounds.origin.x+10, bounds.origin.y, bounds.size.width-10, bounds.size.height);

returninset;

}

//控制左视图位置

- (CGRect)leftViewRectForBounds:(CGRect)bounds

{

CGRectinset =CGRectMake(bounds.origin.x+10, bounds.origin.y, bounds.size.width-250, bounds.size.height);

returninset;

//return CGRectInset(bounds,50,0);

}

//控制placeHolder的颜色、字体

- (void)drawPlaceholderInRect:(CGRect)rect

{

//CGContextRef context = UIGraphicsGetCurrentContext();

//CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor);

[[UIColororangeColor]setFill];

[[selfplaceholder]drawInRect:rectwithFont:[UIFontsystemFontOfSize:20]];

}

//下面是使用CustomTextField的代码,可放在viewDidLoad等方法中

_textField= [[CustomTextFieldalloc]initWithFrame:CGRectMake(20,150,280,30)];

_textField.placeholder=@"请输入帐号信息";

_textField.borderStyle=UITextBorderStyleRoundedRect;

_textField.textAlignment=UITextAlignmentLeft;

_textField.delegate=self;

_textField.clearButtonMode=UITextFieldViewModeWhileEditing;

_textField.text=@"aa";

UIImageView*imgv = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"icon-iwant-2.png"]];

_textField.leftView= imgv;

_textField.leftViewMode=UITextFieldViewModeAlways;

[self.viewaddSubview:_textField];

1)可以根据需要设置文本框的样式(包括形状、边框颜色、背景等)。

(2)可以根据需要设置文字显示样式(包括输入密码时的密文显示、文字横向居中、纵向居中上下、输入的文字是否首席木大写、文字超过后是否缩小还是向右滚动等)。

(3)可以根据需要设置各种不同的键盘样式(只有数字、只有字母等等)。

(4)还有inputView可以弹出一个视图,用于取代弹出键盘,暂时不知道什么用处,但貌似可以用得地方很多啊。

(5)还有return的样式设置,可以设置为Google也可以设置为Go和Search等更形象的按钮。

(6)还有一个clearsOnBeginEditing是否设置清除按钮也很常用。

(7)还有用得比较多得估计是左右视图,也就是我们常见的用户名和密码的前面还有一个小icon图片表示用户的“小人”和表示密码的“锁”的图片,用左右视图可以加载进来,当然最后要记得设置左右视图模式为Always,不然默认是Never不显示的。

- (void)viewDidLoad {

//textfiled1本想是textField1的,但不影响

UITextField *textFiled1=[[UITextField alloc]init];

//此时textField1已存在,但因为是透明背景,所以看不见,但是点击那块地方会发现光标闪烁可写

//为了证明是透明背景而不是白色背景,我们可以设置self.view背景为红色,看看textField1是白色还是透明色

//    self.view.backgroundColor=[UIColor redColor];

textFiled1.frame=CGRectMake(10, 30, 300, 30);

//设置边框样式

//UITextBorderStyleRoundedRect-圆角矩形,背景是白色,不再是透明的

//UITextBorderStyleLine-矩形,黑色边框,透明背景

//UITextBorderStyleBezel-和上面类似,但是是灰色的边框,背景透明

textFiled1.borderStyle=UITextBorderStyleRoundedRect;

//设置背景颜色,会覆盖上面圆角矩形默认的白色背景

textFiled1.backgroundColor=[UIColor purpleColor];

//设置提示(默认)文字

textFiled1.placeholder=@"请输入您的密码";

//设置密文输入,就是和输入密码时类似的显示为小圆点

textFiled1.secureTextEntry=YES;

//设置键盘样式,比如银行取款密码只需要数字,有的输入邮箱需要@等等

//UIKeyboardTypeAlphabet和UIKeyboardTypeDefault类似,就是我们平时看到那样,都是字母,然后有个按键可以切换符号

//UIKeyboardTypeASCIICapable好像和上面差不多

//UIKeyboardTypeDecimalPad,UIKeyboardTypeNumberPad都是数字,但前者多了一个“小数点”按键

//UIKeyboardTypeEmailAddress-除了字母还有小数点和@出现

//UIKeyboardTypeNamePhonePad-貌似正常

//UIKeyboardTypePhonePad-电话键盘,不仅有数字还有*和#的那种

//UIKeyboardTypeNumbersAndPunctuation-只有数字和标点符号

//UIKeyboardTypeTwitter-除了字母还有@和#,这是微博的符号

//UIKeyboardTypeURL-除字母,还有.com按钮,方便输入

//UIKeyboardTypeWebSearch-主要区别在于return键变成了GO键

//注意:如果是最xcode6下的模拟器的话,默认是不调出软键盘的,按CMD+K可以调出,或者在菜单Hardware里地Keyboard里设置

textFiled1.keyboardType=UIKeyboardTypeWebSearch;

//设置键盘外观

//UIKeyboardAppearanceDark和UIKeyboardAppearanceAlert都是把键盘背景变成半透明灰色区别不明显

//UIKeyboardAppearanceLight貌似和UIKeyboardAppearanceDefault一样,没啥区别

textFiled1.keyboardAppearance=UIKeyboardAppearanceAlert;

//设置弹出视图,inputView即弹出的不是键盘而是这个视图

//设置的frame时,只有高度有用,其他x和y和宽都是无效的,宽是默认的整个键盘宽度

UIImageView *imgView1=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"logo-60@3x.png"]];

imgView1.frame=CGRectMake(60, 60, 300, 300);

textFiled1.inputView=imgView1;

//设置左视图,就是用户名和密码,有时候放个图片的位置

UIView *view1=[[UIView alloc]init];

//x和y无效,x都是0,而y是根据高度来自动调整的。即高度如果超过textField则默认是textField高,如小于textField高度,则上下居中显示。唯一有效的就是宽度

view1.frame=CGRectMake(10, 500, 50, 10);

view1.backgroundColor=[UIColor orangeColor];

textFiled1.leftView=view1;

//最重要的时:默认它是不显示的即UITextFieldViewModeNever,我们可以设置永远显示UITextFieldViewModeAlways

//UITextFieldViewModeUnlessEditing-一开始就有,点击框,呃,貌似还有

//UITextFieldViewModeWhileEditing-一开始没有,点击框就出现

textFiled1.leftViewMode=UITextFieldViewModeAlways;

//同样,我们可以设置右视图,当然也可以加载和图片进来

UIImageView *imgView2=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"logo-60@3x.png"]];

imgView2.frame=CGRectMake(10, 500, 50, 10);

textFiled1.rightView=imgView2;

textFiled1.rightViewMode=UITextFieldViewModeAlways;

//设置清除按钮,就是那个叉叉X,一点击整个输入框的文字全部删除重新输入的那个X(我们先注释掉不让右视图显示,来查看效果)

//其实我们在写clearButtonMode是它又提示说这是一个UITextFieldViewMode类型,所以也是和上面一样

textFiled1.clearButtonMode=UITextFieldViewModeWhileEditing;

//再次编辑时是否清空内容,这个除特定场景外很少用,会让用户抓狂的

//当然为了模拟再次编辑,我们需要鼠标点到其他地方然后再点回来,所以再创建一个textField

textFiled1.clearsOnBeginEditing=NO;

//这个clearsOnInsertion貌似点击回去再次编辑时不清楚,但是只要一输入内容就会清除之前的

textFiled1.clearsOnInsertion=YES;

UITextField *textField2=[[UITextField alloc]init];

textField2.frame=CGRectMake(10, 80, 300, 100);

textField2.borderStyle=UITextBorderStyleRoundedRect;

[self.view addSubview:textField2];

//我们用上面创建的textField2来做如下

//纵向对齐方式,默认是居中

//UIControlContentVerticalAlignmentCenter居中,所以Top、Bottom就是居上居下。Fill貌似和Top差不多

textField2.contentVerticalAlignment=UIControlContentVerticalAlignmentFill;

//当然还有横向对齐

//也有左中右和Fill四种,但是貌似没看到什么效果,可能对文字无效,因为有专门的针对文字的设置

textField2.contentHorizontalAlignment=UIControlContentHorizontalAlignmentRight;

//设置文字对齐方式

//同样我们输入textAlignment时有提示是NSTextAlignment类型,有好几种,不细讲

textField2.textAlignment=NSTextAlignmentCenter;

//设置调整文字大小以适配宽度(即输入不下时缩小文字,实在缩小不了了,就向后滚动),默认是向右滚动的

textField2.adjustsFontSizeToFitWidth=YES;

//设置最小字号,和上面有关,即小于这个字号的时候,我就不缩小了,直接向右滚动

textField2.minimumFontSize=2;

//设置字母大小样式,输入autocapitalizationType时有提示是UITextAutocapitalizationType类型

//UITextAutocapitalizationTypeAllCharacters-所有字母大写(用键盘输入的话发现失效,需要用软键盘输入才有效,以下同理)

//UITextAutocapitalizationTypeWords-单词首字母大写

//UITextAutocapitalizationTypeSentences-句首字母大写

textField2.autocapitalizationType=UITextAutocapitalizationTypeSentences;

//设置return样式,有Done/Go/Next/Join/Google/Search/Yahoo/EmergencyCall/Send等,除了默认外,其他的按钮都是蓝颜色背景

textField2.returnKeyType=UIReturnKeyEmergencyCall;

[self.view addSubview:textFiled1];

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容