代码详解ios键盘收起问题
在开发过程中,我们经常会用到UITextField、UITextView等文本框,然后这些文本框在点击之后会自动成为第一响应者(FirstResponder),并自动弹出软键盘。然而,没有自动定义好的软键盘的回收。今天,我在开发过程中就遇到了这个问题,首先,软键盘收起会发生在两种情况下,一是当前区域为非第一响应者,二是当前区域的输入结束。具体解决方案有两种:
1、在当前页面设置点击事件,当点击事件发生时,注销当前视图的第一响应者或者设置当前摄入结束。当点击事件发生在非选中区域时,则键盘会自动回收:
//在viewDidLoad中添加点击手势,为了关闭键盘的操作
UITapGestureRecognizer*tap1=[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(viewTapped:)];
tap1.cancelsTouchesInView=NO;
[self.viewaddGestureRecognizer:tap1];
//点击空白处的手势要实现的方法,设置当前输入结束
-(void)viewTapped:(UITapGestureRecognizer*)tap1
{
[self.viewendEditing:YES];
}
这种方法对于视图上的任何UITextField、UITextView等文本框都有效,不需要对每一个UITextField、UITextView等文本框进行进行设置。
2、利用键盘上的回车键来进行设置当前UITextField、UITextView等文本框不是第一响应者,这种方法对UITextField、UITextView的应用不一样,需要区别进行。
对于UITextField,相应的UITextFieldDelegate有相关的处理
//设置回车键的类型和代理
self.themeTextField.returnKeyType=UIReturnKeyDone;
self.themeTextField.delegate=self;
#pragmamark-textFielddelegate
-(BOOL)textFieldShouldReturn:(UITextField*)textField{
[textFieldresignFirstResponder];
//[self.viewendEditing:YES];
returnYES;
}
对于UITextView,相应的UITextViewDelegate并没有相应的处理回车键的方法。但是,我们可以根据UITextViewDelegate提供的方法对键盘输入的值进行判断,如果为回车键(\n)则设置当前UITextView不是第一响应者,否则不操作。
//设置回车键的类型和代理,当前类是继承自UITextView的一个类 self.delegate=self; self.returnKeyType=UIReturnKeyDone;
//UITextViewDelegate代理,当键盘输入变化时调用,可以通过该方法判断输入的内容
-(BOOL)textView:(UITextView*)textViewshouldChangeTextInRange:(NSRange)range
replacementText:(NSString*)text
{
//判断是否是回车键
if([textisEqualToString:@"\n"]){
[textViewresignFirstResponder];
returnNO;
}
returnYES;
}