赞
踩
UITextField
在界面中显示可编辑文本区域的对象。
// 文本 @property(nullable, nonatomic,copy) NSString *text; // 富文本 @property(nullable, nonatomic,copy) NSAttributedString *attributedText; // 文本颜色 @property(nullable, nonatomic,strong) UIColor *textColor; // 文本字体 @property(nullable, nonatomic,strong) UIFont *font; // 文本的对齐方式 @property(nonatomic) NSTextAlignment textAlignment; // 占位文本,默认颜色是灰色 @property(nullable, nonatomic,copy) NSString *placeholder; // 富文本占位文本 @property(nullable, nonatomic,copy) NSAttributedString *attributedPlaceholder; // 编辑框中的内容密码显示,默认是NO @property(nonatomic,getter=isSecureTextEntry) BOOL secureTextEntry; // 再次编辑前是否清空,默认是NO @property(nonatomic) BOOL clearsOnBeginEditing; // 背景图像 @property(nullable, nonatomic,strong) UIImage *background; // 不能编辑时背景图像 @property(nullable, nonatomic,strong) UIImage *disabledBackground; // 边框样式,默认是UITextBorderStyleNone @property(nonatomic) UITextBorderStyle borderStyle; // 设置清除按钮的模式,默认是UITextFieldViewModeNever @property(nonatomic) UITextFieldViewMode clearButtonMode; // 文本是否自动缩小以适应文本窗口大小,默认是NO @property(nonatomic) BOOL adjustsFontSizeToFitWidth; // 设置字段文本adjustsFontSizeToFitWidth为YES时最小字体大小 @property(nonatomic) CGFloat minimumFontSize; // 自动大写样式适用于键入的文本 @property(nonatomic) UITextAutocapitalizationType autocapitalizationType; // 文本字段的自动纠正行为 @property(nonatomic) UITextAutocorrectionType autocorrectionType; // 文本字段的拼写检查行为 @property(nonatomic) UITextSpellCheckingType spellCheckingType;
borderStyle
样式
typedef NS_ENUM(NSInteger, UITextBorderStyle) {
UITextBorderStyleNone, // 默认样式,文本字段不显示边框
UITextBorderStyleLine, // 显示一个细长的矩形
UITextBorderStyleBezel, // 显示文本字段的边框样式
UITextBorderStyleRoundedRect // 显示文本字段的圆角样式边框
};
显示如下
clearButtonMode
样式
typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
UITextFieldViewModeNever, // 重不出现
UITextFieldViewModeWhileEditing, // 编辑时出现
UITextFieldViewModeUnlessEditing, // 除了编辑外都出现
UITextFieldViewModeAlways // 一直出现
};
spellCheckingType
样式
typedef NS_ENUM(NSInteger, UITextSpellCheckingType) {
UITextSpellCheckingTypeDefault, // 默认
UITextSpellCheckingTypeNo, // 不启用拼写检查
UITextSpellCheckingTypeYes, // 启用拼写检查
};
autocorrectionType
样式
typedef NS_ENUM(NSInteger, UITextAutocorrectionType) {
UITextAutocorrectionTypeDefault, // 默认
UITextAutocorrectionTypeNo, // 不自动纠错
UITextAutocorrectionTypeYes, // 自动纠错
};
autocapitalizationType
样式
typedef NS_ENUM(NSInteger, UITextAutocapitalizationType) {
UITextAutocapitalizationTypeNone, // 不自动大写
UITextAutocapitalizationTypeWords, // 单词首字母大写
UITextAutocapitalizationTypeSentences, // 句子首字母大写
UITextAutocapitalizationTypeAllCharacters, // 所有字母都大写
};
// 键盘类型
@property(nonatomic) UIKeyboardType keyboardType;
// 键盘的视觉样式
@property(nonatomic) UIKeyboardAppearance keyboardAppearance;
// 键盘上返回键的类型
@property(nonatomic) UIReturnKeyType returnKeyType;
keyboardType
样式
typedef NS_ENUM(NSInteger, UIKeyboardType) {
UIKeyboardTypeDefault, // 默认键盘
UIKeyboardTypeASCIICapable, // 显示标准ASCII字符的键盘
UIKeyboardTypeNumbersAndPunctuation, // 显示数字和标点键盘
UIKeyboardTypeURL, // 显示为URL输入优化的键盘
UIKeyboardTypeNumberPad, // 显示数字小键盘
UIKeyboardTypePhonePad, // 显示电话号码的键盘
UIKeyboardTypeNamePhonePad, //
UIKeyboardTypeEmailAddress, // 显示为输入电子邮件输入优化的键盘
UIKeyboardTypeDecimalPad, // 显示带有数字和小数点的键盘
UIKeyboardTypeTwitter, // 显示针对Twitter输入优化的键盘
UIKeyboardTypeWebSearch, // 显示针对网页搜索输入优化的键盘
UIKeyboardTypeASCIICapableNumberPad, // 显示只输入ASCII数字的数字键盘
};
returnKeyType
样式
typedef NS_ENUM(NSInteger, UIReturnKeyType) {
UIReturnKeyDefault, // 默认,标有Return按钮
UIReturnKeyGo, // 标有Go按钮
UIReturnKeyGoogle, // 标有Google按钮,用于搜索
UIReturnKeyJoin, // 标有Join按钮
UIReturnKeyNext, // 标有Next按钮
UIReturnKeyRoute, // 标有Route按钮
UIReturnKeySearch, // 标有Search按钮
UIReturnKeySend, // 标有Send按钮
UIReturnKeyYahoo, // 标有Yahoo按钮,用于搜索
UIReturnKeyDone, // 标有Done按钮
UIReturnKeyEmergencyCall, // 紧急呼叫按钮
};
keyboardAppearance
typedef NS_ENUM(NSInteger, UIKeyboardAppearance) {
UIKeyboardAppearanceDefault, // 默认外观键盘
UIKeyboardAppearanceDark, // 适合黑暗外观
UIKeyboardAppearanceLight // 适合白色外观
};
UITextFieldDelegate
的方法
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { // 返回一个BOOL值,指定是否开始编辑 return YES; } - (void)textFieldDidBeginEditing :(UITextField *)textField { // 开始编辑,UITextField将成为first responder } - (BOOL)textFieldShouldEndEditing:(UITextField *)textField { // 返回BOOL值,指定是否允许结束编辑,当编辑结束,文本字段会让出first responder // 想在阻止可以返回NO return NO; } - (BOOL)textField:(UITextField *)textField shouldChangeCharactersIn Range:(NSRange)range replacementString:(NSString *)string { // 使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。 // 可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。 // 要防止文字被改变可以返回NO return YES; } - (BOOL)textFieldShouldClear:(UITextField *)textField { // 返回一个BOOL值指明是否允许根据用户请求清除内容 // 可以设置在特定条件下才允许清除内容 return YES; } - (BOOL)textFieldShouldReturn:(UITextField *)textField { // 返回一个BOOL值,指明是否允许在按下回车键时结束编辑 // 如果允许要调用resignFirstResponder 方法,这回导致结束编辑,而键盘会被收起 [textField resignFirstResponder]; return YES; }
iOS在默认情况下点击输入框会弹出键盘,但必须实现textFieldShouldReturn:(UITextField *)
方法里才可以收键盘。可以实现点击键盘以外的空白区域来实现收键盘的功能。
View
的touchesBegan:(NSSet<UITouch *> *) withEvent:(UIEvent *):
触摸事件来实现- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
if (self.textField) {
[self.textField resignFirstResponder];
}
}
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyboardHide:)];
// 设置成NO表示当前控件响应后会传播到其他控件上,默认为YES。
tapGestureRecognizer.cancelsTouchesInView = NO;
// 将触摸事件添加到当前view
[self.view addGestureRecognizer:tapGestureRecognizer];
}
- (void)keyboardHide:(UITapGestureRecognizer *)tap {
if (self.textField) {
[self.textField resignFirstResponder];
}
}
当UITextField
使用键盘输入文字时,会发出通知
UIKeyboardWillShowNotification //键盘显示之前发送
UIKeyboardDidShowNotification //键盘显示之后发送
UIKeyboardWillHideNotification //键盘隐藏之前发送
UIKeyboardDidHideNotification //键盘隐藏之后发送
如果UITextField
位于界面底部,软键盘会遮挡UITextField
。
我们需要将整个界面往上移动,编辑结束后恢复整个界面。
// 添加软键盘通知监听 - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (void)keyboardWillShow:(NSNotification *)notification { // 获取键盘位置 NSDictionary *userinfo = [notification userInfo]; NSValue *value = [userinfo objectForKey:UIKeyboardFrameEndUserInfoKey]; CGRect keyboardFrame = [value CGRectValue]; // 输入框与键盘的位置 CGFloat bottomHeight = self.view.frame.size.height - CGRectGetMaxY(self.textField.frame); CGFloat distance = bottomHeight - 5.0 - keyboardFrame.size.height; if (distance < 0) { self.move = TRUE; [UIView animateWithDuration:1.0 animations:^{ //将视图的Y坐标向上移动offset个单位,以使下面腾出地方用于软键盘的显示 self.view.frame = CGRectMake(0.0f, distance, self.view.frame.size.width, self.view.frame.size.height); }]; } } - (void)keyboardWillHide:(NSNotification *)notification { if (self.move) { self.move = FALSE; [UIView animateWithDuration:1.0 animations:^{ self.view.frame = CGRectMake(0.0f, 0, self.view.frame.size.width, self.view.frame.size.height); }]; } } // 获取当前输入框 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { self.textField = textField; return TRUE; }
显示如下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。