如何隐藏键盘

在手机上每次输入键盘都会自动打开,但是输入完之后键盘确不会自动隐藏。我感觉这是个蛋疼的设计,苹果干嘛不直接写个像UIActionSheet那样的东西,点击背景就可以隐藏键盘。不过IOS是高手设计的,高手写的东西自有它存在的道理,我等渣渣还是以后再去揣摩吧……

有两种方法可以实现隐藏键盘:

1
2
3
4
//OC
[self.view endEditing:true];

[textField resignFirstResponder];

其中[self.view endEditing:true];可以让整个view取消所有第一响应者;[textField resignFirstResponder];只可以让那个相应的textField取消第一响应。

  • FirstResponder第一响应对象指的是窗口中,应用程序认为最适合处理事件的对象。当点击了textFiled之后,textField就成为了第一响应对象。这时键盘就会弹出来。

然后有几种实现方式

第一种:调用touchesBegan函数

1
2
3
4
//OC
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[_textField resignFirstResponder];
}

第二种:在背景上自定义一个手势

1
2
3
4
5
6
7
8
9
10
11
//OC
- (void)viewDidLoad {
[super viewDidLoad];
_textField.delegate = self;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action: @selector(tapAction)];
[self.view addGestureRecognizer:tap];
}

- (void)tapAction{
[_textField resignFirstResponder];
}

现在点击背景就可以隐藏键盘了

第三种:通过点击return键隐藏键盘

按下键盘的return键会调用-(void)textFieldDidEndEditing:(UITextField *)textField这个方法,所以通过这个方法也可以实现键盘的隐藏

1
2
3
4
//OC
-(void)textFieldDidEndEditing:(UITextField *)textField{
[_textField resignFirstResponder];
}

或者

1
2
3
4
5
6
7
//OC
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if ([string isEqualToString:@"\n"]){
[textField resignFirstResponder];
}
return YES;
}

效果图:

隐藏键盘

最后注意,textField要设置代理 _textField.delegate = self;