记录一个菜鸟的iOS学习之旅,如能帮助正在学习的你,亦枫不胜荣幸;如路过的大神如指教几句,亦枫感激涕淋!
本文摘要:主讲UITextField与UITextView的区别、关于模拟器中键盘的使用、监听键盘弹起和退出的通知事件。至于这两个控件的常用属性,不在一一举例说明。
UILabel控件用于显示文本内容,而UITextField和UITextView控件能够在获取焦点后调起键盘让用户自由输入并编辑文本内容,类似于Android中的EditText控件。在介绍之前,我们先看一下二者之间的主要区别:
继承关系
UITextField继承自UIView,UITextView继承自UIScrollView;文本行数
UITextView支持多行输入,可以滑屏垂直滚动,UITextField仅支持单行输入;Placeholder
UITextField支持设置Placeholder属性,即在用户输入文本前显示提示性的内容,而UITextView则没有这个功能。
下面我们通过代码实例来学习如何通过return键隐藏键盘,同时监听键盘弹起和退出的通知事件。
我们在故事板中拖入一个UITextField和UITextView控件,并在右侧工具栏的属性检查器中设置相关属性,比如在Clean Button中设置清除按钮的显示方式,在Alignment中设置文本内容的水平和垂直对齐方式,在Keyboard Type中设置键盘类型等。
一旦UITextField和UITextView获取焦点,便成为第一响应者,系统便会自动弹出键盘,然而键盘的关闭缺需要我们自己去处理。这里就需要提到“第一响应者”这个概念。在iOS中,事件总是沿着响应者链从第一响应者向下传递。要关闭系统键盘,就需要控件放弃第一响应者身份。而本文中提到的两个文本控件也提供了这个方法。
在 ViewController.h
文件中添加UITextField和UITextView各自的委托协议:UITextFieldDelegate和UITextViewDelegate,并在 ViewController.m
文件中添加协议方法。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO;
}
return YES;
}
通过委托协议方法和“resignFirstResponder:”方法即可通过return键轻松关闭系统键盘。
在iOS系统,键盘的弹起和退出都会发送响应的通知,我们为了监听这个通知可以利用通知管理器在视图控制器的生命周期方法中注册和解除通知,代码如下:
- (void) keyboardDidShow{
NSLog(@"keyboardDidShow");
}
- (void) keyboardDidHide{
NSLog(@"keyboardDidHide");
}
- (void) viewWillAppear:(BOOL)animated{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide) name:UIKeyboardDidHideNotification object:nil];
[super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
[super viewWillDisappear:animated];
}
在运行代码之前,别忘了将View Controller Scene中的文本编辑控件与视图控制器中的委托协议相关联。最终效果如下:
疑难解惑:
Auto-enable Return Key
在属性检测器中,如果勾选了此项,则表示至少在文本框输入一个字符,键盘中的return按键才能起效。所以,在勾选状态下,如果文本框内容为空(不包含Placeholder),return键将自动置灰,点击无效;-
模拟器键盘与物理键盘
在模拟器中运行应用,我们既可以使用模拟器中提供的虚拟键盘进行内容输入,也可以使用Mac笔记本中的物理键盘,在模拟器中可以设置。在 iOS Simulator菜单栏的Hardware选项中,选择Keyboard,可以设置是否勾选Connect Hardware Keyboard,即是否连接Mac物理键盘。也可以使用快捷键 组合command + k
切换。