关于IOS键盘的一些调用心得与坑

以下是关于自己在项目中关于调用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键盘时的一些心得,后续有新的内容会持续更新,如有疑问或者错误的地方欢迎指正,谢谢

你可能感兴趣的:(关于IOS键盘的一些调用心得与坑)