以下是关于自己在项目中关于调用IOS键盘以及监听个别按键时的一些心得:
一、键盘打开方式
UITextField *field = [[UITextField alloc] initWithFrame:CGRectFrame(x,y,width,height)]; [field becomeFirstResponder];
键盘的调用可以通过调用becomeFirstResponder使得field成为第一响应者,从而调出键盘;
二、在键盘打开以及关闭过程中,可以添加通知事件来处理某些工作
//键盘显示通知,会调用selector参数中对应的keyboardWillShow(自定义的)函数
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
//键盘隐藏通知,会调用selector中对应的keyboardWillHide(自定义的)函数
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
一般可以在键盘显隐时对对应的view进行布局修改,防止键盘遮挡等问题
三、避免使用第三方输入法时,键盘显示时会出现调用三次二中使用的keyboardWillShow函数
可以设置一个全局整型参数,第一次调用时keyboardWillShow中可计为1,后两次调用时则根据这个参数来判断是否执行相关代码,而在键盘隐藏时或其他需求的地方重置参数为0即可。
四、UITextField内容监听方法
A.UITextField *textField = [[UITextField alloc] initWithFrame:rect];
[textField addTarget:self action:@selector(clickReturnKeyDone) forControlEvents:UIControlEventEditingDidEndOnExit];//编辑返回、go、return等操作
[textField addTarget:self action:@selector(textChangeBegin) forControlEvents:UIControlEventEditingDidBegin];//编辑开始事件
[textField addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];//编辑改变事件
根据指定的UIControlEvent事件去调用指定的函数,执行需要的操作。
B.也可通过实现UITextFieldDelegate中的函数来执行某些操作
首先在.h文件中添加对应的UITextFieldDelegate,其次给对应的UITextField文本框添加协议
textField.delegate = self; 具体的事件可自行查看UITextFieldDelegate协议中的函数实现
五、监听键盘上的删除以及回车按键
网上有建议自定义UITextField的,然后重写其中的deleteBack函数来监听对应的删除按键,下面我是通过UITextFieldDelegate协议中的一个函数来监听的:
//这个函数时文本框改变时调用的方法,其中的string参数是用户本次输入到文本框的字符串
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([textField.text isEqualToString:@""]) { //这个时候得到的还是文本框未改变时的字符串
if ([string length] < 1 ) {
//如果用户点击的删除按键,那么string是空的,没有长度
}
if ([string length]>0) {
int result = [string characterAtIndex:0];
if (result == 10) {
//用户点击了回车
}
i f (result == 32) {
//用户点击了空格
}
}
}
return YES;
}
以上是本人在使用IOS键盘时的一些心得,后续有新的内容会持续更新,如有疑问或者错误的地方欢迎指正,谢谢