您的位置:首页 > 移动开发 > IOS开发

ios 键盘收起

2016-11-22 13:56 246 查看
在使用
UITextField
的时候,我们会和键盘打交道,有时候要求弹出来的键盘类型是数字键盘,有时候要求我们弹出来的是一般的键盘。当我们输入完成的时候,就涉及到在上什么时候收回键盘的事情了。收回键盘分下面的情况来讨论。

大体来说,收起键盘的方法有:

让textFiled放弃成为第一响应者(
resignFirstResponder
)
让view或者子view强制结束编辑状态(
endEditing
)

1.输入完以后用户点击
return
后收起键盘。

可以点击
return
收起键盘并不意味着弹出来的键盘一定都有
return
这个按键,比如数字键盘类型就没有,
UIKeyboardTypeWebSearch
类型的键盘
return
键就变成了
Go
键,需要注意的是这时候的
Go
键相当于
return
键。

要想实现点击
return
让键盘收起,首先需要设置textField代理,当然还有遵循
UITextFieldDelegate
协议:

_textField.delegate = self;

然后实现协议方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField;
,当然你也可以在这个方法里 main实现一些需求逻辑,比如判断输入的内容符不符合要求等。

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
return [textField resignFirstResponder];
}

2.点击背景后收起键盘

点击背景收起键盘可以实现view的
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
方法,然后执行view的
- (BOOL)endEditing:(BOOL)force;
方法。

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self.view endEditing:YES]; //实现该方法是需要注意view需要是继承UIControl而来的
}

还有一些比较笨的方法也可以实现达到点击背景后收起键盘的效果,比如:在背景view上面加手势,添加UIButton或者view,然后在对应的点击事件的监听方法中实现
resignFirstResponder
或者
endEditing


UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyboardHide:)];
//设置成NO表示当前控件响应后会传播到其他控件上,默认为YES。
tapGestureRecognizer.cancelsTouchesInView = NO;
//将触摸事件添加到view上
[self.view addGestureRecognizer:tapGestureRecognizer];

-(void)keyboardHide:(UITapGestureRecognizer*)tap{
[textFiled resignFirstResponder];
}

3.不用view实现
endEditing
的方法

如果说在比较难获取viewController的view时,可以使用下面的方法:

[[[UIApplication sharedApplication] keyWindow] endEditing:YES];

或者

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil f


文/张飞_(简书作者)

原文链接:http://www.jianshu.com/p/532d12375e9a

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: