在开发APP的过程中,我们会很经常用到键盘输入,例如聊天、登陆、信息填写等等。键盘的调用和回收就显得非常的频繁。如何处理或者自定义键盘的出现和回收就成了一个小但是重要的细节。
回收键盘,核心就一句代码:
myTextField resignFirstResponder //让当前的输入框(或者别的)调用resignFirstResponder方法,放弃第一响应者的身份。
下面就介绍一些网络上常用到的方法:
PS:我在写代码时,尽量的使用textfield等输入空间已有的代理方法。你应该在使用前添加这些输入空件的代理协议,并将委托设置为当前的controller(delegate=self).
一、点击空白处键盘消失
在编辑完内容后,点击应用的空白处,回收键盘。原理是调用页面的一个方法(当你轻触当前界面空白处时,调用该方法)
代码也就一句:
<pre name="code" class="objc">-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
[self.textField resignFirstResPonder];
}
二、自定义回收按钮
有时候当画面太小或者基于用户体验的原因,我们需要自己定义一个按钮,并且看起来像是附加在键盘上一样。当我们编辑时,随键盘出现,点击按钮,编辑结束,键盘回收,按钮一同消失。
自定义的原理就是,我们在vewDidLoad方法里创建监听事件,每当监听到键盘出现,就同时添加自定义按钮到键盘上,点击这个按钮,事件结束,按钮与键盘同时消失,撤销监听。下面就是实现过程:
1、向监听注册事件,发现键盘出现,调用对应的方法
- (void)viewDidLoad {
[super viewDidLoad];
<span style="font-family: Arial, Helvetica, sans-serif;"> [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (doneButtonshow:) name: UIKeyboardDidShowNotification object:nil]; //注册监听事件,准备调用方法;</span>
}
2、编写调用事件的相关方法实现
-(void) doneButtonshow: (NSNotification *)notification {
doneButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
//创建的按钮坐标对应在键盘的适合位置,使它看起来像是键盘的一部分,而不显得突兀;
doneButton.frame = CGRectMake(0, 228, 70, 35);
[doneButton setTitle:@"完成" forState: UIControlStateNormal];
//对按钮添加事件,方面后面的键盘回收实现;
[doneButton addTarget: self action:@selector(hideKeyboard) forControlEvents: UIControlEventTouchUpInside];
[self.view addSubview:doneButton];
}
3、点击按钮的相关方法实现
当点击完成按钮时,完成所有的回收。这里核心代码还是键盘放弃第一响应者身份。
-(void) hideKeyboard {
[doneButton removeFromSuperview]; //移除自定义按钮
[myTextField resignFirstResponder]; //回收键盘
}
这样就完成了为键盘添加自定义的回收按钮,至于自定义的按钮要和IOS的虚拟键盘适应,效果就交给美工吧~
一般这种需求会使用在数字键盘上,因为iPhone的数字键盘是不带完成编辑的按钮滴~
三、点击Return按钮隐藏
这种方法就是输入完,直接点击return按钮,实现键盘回收。
代码实现:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
但是,有时候,用户需要依次填写多个输入框,如果写完,点击空白,再写,再点击空白,用户体验会不好,这时候我们就可以使用这种比较讨好的做法,那就是把虚拟键盘里的ruturn按钮功能修改为,用户点击后,自动跳转到下一个输入框,减少一次操作。
核心代码就是: [nextTextfield becomeFirstResponder];
OK,代码实现:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
[self.buyerPhone becomeFirstResponder];//添加了这一句
return YES;
}
以上就是一些简单的键盘回收的方法,还有关于键盘遮挡的问题,可以看我的另一篇博客:键盘遮挡自适应。