[UITextField]
文本输入框
UITextField是常用的文本输入控件,比如我们用的QQ的登录界面,词典输入要查询的单词都使用了文本框控件。之前介绍的UILabel可以在界面中显示文本,但用户无法选择或编辑UILabel中的文本,想接受用户输入文本,就可以使用UITextField控件。当我们在用户界面上点击文本框时,屏幕底部会弹出键盘,用于向文本框中输入文字。
1.UITextField常用的属性和方法
[1]与文字相关的属性
text:文字
attributedText:形式文字(扩展)
textColor:文字颜色
textAlignment:设置文字的对齐方式
contentVerticalAlignment:设置文字的垂直对齐方式
font:字体
placeHolder:没有输入内容时的占位符
adjustsFontSizeToFitWidth:是否调整字体大小适应宽度
minmumFontSize:设置最小字体
enabled:是否可编辑
secureTextEntry:设置密文显示(密码)
clearButtonMode:设置clearButton模式
isEditing:判断文本输入框是否处于编辑模式
clearsOnBeginEditing:设置进入编辑状态,立即清空文字
2.与背景相关的属性
borderStyle:边框样式(UITextBorderStyleNone,UItextBorderStyleBezel,UITextBorderStyleLine,UITextBorderStyleRoundedRect)
background:背景图
backgroundColor:背景色
disableBackground:禁用状态下的背景图
自定义叠加视图:
leftView/leftViewMode:左视图(可以定制文本框)/左视图模式
rightView/rightViewMode:右视图(可以定制文本框,可能会覆盖掉清除文字的按钮)/右视图模式
3.设置键盘样式
KeyboardType:设置弹出的键盘样式
returnKeyType:设置键盘的return键样式
KeyboardAppearance:设置键盘的色彩
autocapitalizationType:设置大写提示,只适用于英文
autocorrectionType属性:设置自动纠错,适用于英文
inputView 属性:设置弹出自定制键盘
inputAccessoryView属性:设置弹出自定制二级键盘
4.界面重写绘制行为
除了UITextField对象的风格选项,你还可以定制化UITextField对象,为他添加许多不同的重写方法,来改变文本字段的显示行为。这些方法都会返回一个CGRect结构,制定了文本字段每个部件的边界范围。以下方法都可以重写。
-textRectForBounds:重写来重置文字区域
-drawTextInRect:改变绘制文字属性。重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super了
-drawPlaceholderInRect:重写改变绘制占位符属性。重写时调用super可以按默认图形属性绘制,若自己完全重写绘制函数,就不用调用super
-borderRectForBounds:重写来重置边缘区域
-editingRectForBounds:重写来重置编辑区域
-clearButtonRectForBounds:重写来重置clearButton位置,改变size可能导致button的图片失真
5.第一响应者
第一响应者简单地说,就是用户当前正在进行交互的对象。如果用户正在向一个文本框输入数据,那么这个文本框就是当前的第一响应者。第一响应者会随着用户与用户界面的交互而变化。
UIResponder是UIKit框架中的一个抽象类,UIView、UIViewController、UIApplication都是它的子类。UIResponder定义了一系列方法,用于接收和处理用户事件,例如触摸事件、运动事件(摇晃手机)和功能控制事件(编辑文本或播放音乐)等。以上事件中,触摸事件显然应该由被触摸的视图负责处理,系统将触摸事件直接发送给被触摸的视图。其他类型的事件则会由第一响应者(first responder)负责处理,UIWindow有一个firstResponder属性指向第一响应者。如果希望启动应用程序时文本框直接获得焦点显示输入键盘,或者希望点击屏幕其他区域输入键盘消失可以通过下面的方法来设置第一响应者来实现。
becomeFirstResponder方法:成为第一响应者
resignFirstResponder方法:放弃第一响应者
6.UITextField常用代理方法
在之前的OC课程中,我们学习过一个非常重要的概念叫协议,它是实现委托回调的关键,如果一个类遵守这个协议,那么它拥有协议中规定的方法,我们就可以将它的对象设置为被委托方,来帮助委托方完成某些功能。如果一个类遵循UITextFieldDelegate协议,它的对象就可以作为被委托方帮我们处理文本框(委托方)编辑时引发的事件。
UITextFieldDelegate协议的源代码:@protocol UITextFieldDelegate
@optional
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField;// 可以通过返回NO阻止编辑
- (void)textFieldDidBeginEditing:(UITextField *)textField;// 当文本框成为第一响应者时执行此方法
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField;// 返回YES来允许结束编辑
// 当文本框放弃第一响应者时执行此方法
- (void)textFieldEndEndEditing:(UITextField *)textField;
// 返回NO可以阻止对文本框内容的修改(用于定制文本框输入内容)
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
// 清除文本框中的文本时执行
- (BOOL)textFieldShouldClear:(UITextField *)textField;
// 输入结束返回时执行
- (BOOL)textFieldShouldReturn:(UITextField *)textField;
@end
6.通知中心(NSNotificationCenter)
通知中心实际上是iOS程序内部之间的一种消息广播机制,主要为了解决应用程序内部不同对象之间解耦而设计。它是基于观察者模式设计的,不能跨应用程序进程通信,当通知中心接收到消息之后会根据内部的消息转发表,将消息发送给订阅者。
UITextField常用通知:
// 文本输入框开始编辑通知
UITextFieldTextDidBeginEditingNotification;
// 文本输入框结束编辑通知
UITextFieldTextDidEndEditingNotification;
// 文本输入框文本改变通知
UITextFieldTextDidChangeNotification;
// 键盘显示通知
UIKeyboardWillShowNotification
// 键盘隐藏通知
UIKeyboardWillHideNotification