Mac / Mac mini
Xcode
先来总结一下UITextField的属性:一.==初始化 创建UITextField===<1> 直接构造 时 指定位置 及 大小 UITextField *nameField = [[UITextField alloc] initWithFrame:CGRectMake(50, 150 , 275, 40)];<2>也可以通过中心点来确定文本框的位置 UITextField *field = [[UITextField alloc]initWithFrame:CGRectMake(0, 0 , 275, 40)]; field.center = CGPointMake(180, 400); <3>设置文本框文字 field.text = @"你好"; //文本框输入的文字的颜色(不写时 默认黑色) field.textColor = [UIColor blackColor]; //光标的颜色 nameField.tintColor = [UIColor blueColor]; //文本框的背景颜色(默认 白色 ) field.backgroundColor = [UIColor brownColor]; <4>设置文本框文字大小 field.font = [UIFont systemFontOfSize:30]; //设置UITextField的文字大小和字体 field.font=[UIFont fontWithName:@"Times New Roman" size:20]; //根据输入文字动态调整字体大小,需要设置一个最小字体大小 textField.adjustsFontSizeToFitWidth = YES; textField.minimumFontSize = 10.0; //设置最小字体<5>文本框文字的对齐方式( 0 - 居左 , 1 -居中 , 2 -居右) field.textAlignment = NSTextAlignmentCenter;//也可以写成 field.textAlignment = 1;<6>文本框是否可编辑 不写时 默认 YES 可编辑 field.enabled = NO; <7> 输入框默认输入文本,有时需求UITextField只可显示不可编辑的,此时起展示作用:用此属性设置需要显示的文本然后设置UITextField不可交互 textField.userInteractionEnabled = NO; 二.====用tag给文本框做一个标记==== //做标记 nameField.tag = 500; //通过标记 找到UITextField UITextField *field =(UITextField *)[self.view viewWithTag:500];三、=== 指定文本框的边框样试==== <1>为圆角矩形(默认 经典 文本框背景为白色 扁平化设计 ) nameField.borderStyle = UITextBorderStyleRoundedRect; //枚举 typedef NS_ENUM(NSInteger, UITextBorderStyle) { UITextBorderStyleNone, UITextBorderStyleLine, UITextBorderStyleBezel, UITextBorderStyleRoundedRect //默认 经典}; <2>可以定制边框 //===边框线条的粗细 field.layer.borderWidth = 1; //====边框线倒角 field.layer.cornerRadius = 10; //====边框线条颜色 field.layer.borderColor = [UIColor grayColor].CGColor;四、====输入设置=========== <1> ====设置文本框的占位文字 nameField.placeholder = @“请输入您的名字”;//===占位文字的字体颜色颜色==== textField.placeholder = @"密码输入框"; // ====方法一:(运行时)[textField setValue:[UIColor colorWithRed:79/255.0f green:79/255.0f blue:79/255.0f alpha:0.5f] forKeyPath:@"_placeholderLabel.textColor"]; [textField setValue:[UIFont boldSystemFontOfSize:20] forKeyPath:@"_placeholderLabel.font"]; //===方法二:(富文本) textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"密码输入框" attributes:@{NSForegroundColorAttributeName: [UIColor colorWithRed:79/255.0f green:79/255.0f blue:79/255.0f alpha:0.5f],NSFontAttributeName : [UIFont systemFontOfSize:20 weight:6],}];//===方法三:将占位文字画上去(重写- (void)drawPlaceholderInRect:(CGRect)rect;)- (void)drawPlaceholderInRect:(CGRect)rect { [[UIColor orangeColor] set]; [self.placeholder drawInRect:rect withFont:[UIFont systemFontOfSize:20]]; } <2>设置将文字显示成掩码(密码框) nameField.secureTextEntry = YES;<3> 设置清除按钮的模式(有文字就有清除按钮) nameField.clearButtonMode = UITextFieldViewModeAlways;//枚举typedef NS_ENUM(NSInteger, UITextFieldViewMode) { //无论什么时候 清除按钮都不显示 UITextFieldViewModeNever, //只有编辑模式下 有文字才显示 编辑结束后不现实 UITextFieldViewModeWhileEditing, //编辑的时候不显示编辑完成后(放弃第一响应者)才显示 UITextFieldViewModeUnlessEditing, //上面有文字就显示,编辑结束后也显示(放弃第一响应者) UITextFieldViewModeAlways };如下图:
五、=====在文本框中加入图片(image)========【注意】图片 png格式的图片可以不加后缀 , jpg 和gif都要加后缀//==创建一个UIImageView类型的图片视图imageView 并指定大小 UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 5, 30, 30)]; //添加图片 imageView.image = [UIImage imageNamed:@"Dudu.jpg"]; // 定制文本框的左视图(把图片设置到文本框左边) nameField.leftView = imageView; nameField.leftViewMode = UITextFieldViewModeAlways;(【注意】模式)//定制文本框的有视图(把图片设置到文本框右边)nameField.rightView = imageView;文本图片设置://枚举typedef NS_ENUM(NSInteger, UITextFieldViewMode) { //无论什么时候 清除按钮都不显示 UITextFieldViewModeNever, //只有编辑模式下 有文字才显示 编辑结束后不现实 UITextFieldViewModeWhileEditing, //编辑的时候不显示编辑完成后(放弃第一响应者)才显示 UITextFieldViewModeUnlessEditing, //上面有文字就显示,编辑结束后也显示(放弃第一响应者) UITextFieldViewModeAlways };如下图:
六、设置占位文字的偏移重写-(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:
利用Runtime获取私有的属性名称,利用KVC设置属性 来设置展位文字的颜色// 设置占位文字的颜色为红色(注意下面的'self'代表你要修改占位文字的UITextField控件)[self setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];完整代码:自定义的UITextField,获取到焦点(编辑状态)的时候是白色,失去焦点(非编辑状态)的时候是灰色://==================================#import "YCTextField.h"#import
iOS 输入框(UITextField)===密码明暗文切换====在做明暗文切换(密码输入框)的时候遇见一个坑,就是切换secureTextEntry的时候,输入框的光标会偏移,下面列出了一个解决办法及一种明暗文切换的方法
切换到密文状态,再次编辑时,内容清空重现:1.切换明密文状态,最后在密文状态,再次编辑,输入任意字符,内容清空;2.其他textField获取焦点,再切回来(密文状态),内容清空解决方法:如下图
====键盘样式=========与键盘相关的属性 textField.keyboardType = UIKeyboardTypeNumberPad; //=========设置键盘的样式 ========= typedef enum { UIKeyboardTypeDefault, 默认键盘,支持所有字符 UIKeyboardTypeASCIICapable, 支持ASCII的默认键盘 UIKeyboardTypeNumbersAndPunctuation, 标准电话键盘,支持+*#字符 UIKeyboardTypeURL, URL键盘,支持.com按钮 只支持URL字符 UIKeyboardTypeNumberPad, 数字键盘 UIKeyboardTypePhonePad, 电话键盘 UIKeyboardTypeNamePhonePad, 电话键盘,也支持输入人名 UIKeyboardTypeEmailAddress, 用于输入电子 邮件地址的键盘 UIKeyboardTypeDecimalPad, 数字键盘 有数字和小数点 UIKeyboardTypeTwitter, 优化的键盘,方便输入@、#字符 UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, } UIKeyboardType; ===首字母是否自动大写=====autocapitalizationType 设置 UITextField的自动大写功能, none:关闭大写功能 words: 单词 sentences: 句子 allcharacters:所有字母 四种类型 textField.autocapitalizationType = UITextAutocapitalizationTypeNone; //枚举typedef enum { UITextAutocapitalizationTypeNone, 不自动大写 UITextAutocapitalizationTypeWords, 单词首字母大写 UITextAutocapitalizationTypeSentences, 句子的首字母大写 UITextAutocapitalizationTypeAllCharacters, 所有字母都大写 } UITextAutocapitalizationType;=======键盘外观========textField.keyboardAppearance=UIKeyboardAppearanceDefault; //枚举 typedef enum { UIKeyboardAppearanceDefault, 默认外观,浅灰色 UIKeyboardAppearanceAlert, 深灰 石墨色} UIReturnKeyType; =====return键变成什么键=======改变 键盘“返回”键的类型 "返回"变为"完成"textField.returnKeyType =UIReturnKeyDone; //枚举typedef enum { UIReturnKeyDefault, 默认 灰色按钮,标有Return UIReturnKeyGo, 标有Go的蓝色按钮 UIReturnKeyGoogle, 标有Google的蓝色按钮,用语搜索 UIReturnKeyJoin, 标有Join的蓝色按钮 UIReturnKeyNext, 标有Next的蓝色按钮 UIReturnKeyRoute, 标有Route的蓝色按钮 UIReturnKeySearch, 标有Search的蓝色按钮 UIReturnKeySend, 标有Send的蓝色按钮 UIReturnKeyYahoo, 标有Yahoo的蓝色按钮 UIReturnKeyYahoo, 标有Yahoo的蓝色按钮 UIReturnKeyEmergencyCall, 紧急呼叫按钮 } UIReturnKeyType;=======是否自动纠错=======autocorrectionType 启用/禁用 UITextFieldUI想的拼写建议功能,根据用户输入错误的单词提供修改建议 textField.autocorrectionType = UITextAutocorrectionTypeNo; typedef enum { UITextAutocorrectionTypeDefault, 默认 UITextAutocorrectionTypeNo, 不自动纠错 UITextAutocorrectionTypeYes, 自动纠错 } UITextAutocorrectionType;【点击键盘上的Return按钮的回调】 -(BOOL)textFieldShouldReturn:(UITextField *)textField{ //返回一个BOOL值,指明是否允许在按下回车键时结束编辑 //如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起[textField resignFirstResponder]; 查一下resign这个单词的意思就明白这个方法了 return YES; }
=====委托的相关方法介绍 UITextFieldDelegate =====// 给文本框设置委托fd.delegate = self; - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ //返回一个BOOL值,指定是否循序文本字段开始编辑 return YES; } - (void)textFieldDidBeginEditing:(UITextField *)textField{ //开始编辑时触发,文本字段将成为first responder } - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ //返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder //要想在用户结束编辑时阻止文本字段消失,可以返回NO //这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息 return NO; } 【重要 文字改变时的回调】 - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ //当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。 //要防止文字被改变可以返回NO //这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中 return YES; } - (BOOL)textFieldShouldClear:(UITextField *)textField{ //返回一个BOOL值指明是否允许根据用户请求清除内容 //可以设置在特定条件下才允许清除内容 return YES; } 【点击键盘上的Return按钮的回调】 -(BOOL)textFieldShouldReturn:(UITextField *)textField{ //返回一个BOOL值,指明是否允许在按下回车键时结束编辑 //如果允许要调用[resign FirstResponder]方法,这回导致结束编辑,而键盘会被收起[textField resignFirstResponder]; [textField resignFirstResponder]; //点击键盘上的return后键盘消失 return YES; }
=========二级键盘的定制=============通过view来给订制二级键盘// 给文本框设置输入附加视图(二级键盘)nameField.inputAccessoryView = myView;如下图
=====放弃焦点键盘==========点击“重置” 按钮 所有的文本框都清零======
=========判断用户使用的是什么键盘===========UITextInputMode这个类是在4.2之后才有的一个新的类,是用来获取当前文本输入模式的。判断用户使用的是什么键盘的。用法很简单[[UITextInputMode currentInputMode] primaryLanguage];
====限制用户输入文字内容的长度====【注意】要求限制用户在密码输入框中输入12位长度以内的密码,如果超出,则不显示,也就是不能再输入了但是如果键盘模式是中文状态,那么就会出现问题,比如你输入“天气真好啊”,然后按return按键,这时候直接把对应的拼音给输入到了输入框中,超过了12个长度限制,这时候又会发现新的bug,就是超过了长度之后,也不能删除输入框中的内容解决办法:
======自动补全========有个需求就是 需要用户输入几位以后账号,可以根据本地存储的登录成功的账号,进行自动补全,并且补全内容为选中状态,不影响用户的新输入
======获取光标的位置======== //获取光标的位置 UITextRange *selectedRange = [textField selectedTextRange];根据NSRange 转换成 NSTextRange UITextPosition *beginning = textView.beginningOfDocument; //开始的位置 UITextPosition *start = [textView positionFromPosition:beginning offset:range.location]; //结束的位置 UITextPosition *end = [textView positionFromPosition:start offset:range.length]; UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end]]; 根据NSTextRange转换成 NSRange- (NSRange) selectedRange:(UITextField *)textField { UITextPosition* beginning = textField.beginningOfDocument; UITextRange* selectedRange = textField.selectedTextRange; UITextPosition* selectionStart = selectedRange.start; UITextPosition* selectionEnd = selectedRange.end; const NSInteger location = [textField offsetFromPosition:beginning toPosition:selectionStart]; const NSInteger length = [textField offsetFromPosition:selectionStart toPosition:selectionEnd]; }