iOS关闭虚拟键盘方法汇总

2020-01-15 13:07:23刘景俊

在birdNameInput所属的视图控制器类的viewDidLoad方法中定义一个UITapGestureRecognizer的对象,然后将它赋值为它的视图。


UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; 
[self.view addGestureRecognizer:tap]; 
[tap release];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
[tap release];

再定义一下选择器调用的方法dismissKeyboard。


(void)dismissKeyboard { 
[birdNameInput resignFirstResponder]; 
} 
-(void)dismissKeyboard {
[birdNameInput resignFirstResponder];
}

如果屏幕上有多个textField的话,一个一个地列出来就有些麻烦。那么将方法修改一下,如下:


(void)dismissKeyboard { 
NSArray *subviews = [self.view subviews]; 
for (id objInput in subviews) { 
if ([objInput isKindOfClass:[UITextField class]]) { 
UITextField *theTextField = objInput; 
if ([objInput isFirstResponder]) { 
[theTextField resignFirstResponder]; 
} 
} 
} 
} 
-(void)dismissKeyboard {
NSArray *subviews = [self.view subviews];
for (id objInput in subviews) {
if ([objInput isKindOfClass:[UITextField class]]) {
UITextField *theTextField = objInput;
if ([objInput isFirstResponder]) {
[theTextField resignFirstResponder];
}
}
}
}

如果这个屏幕上的视图对象很复杂的话,另当别论。 这个方法是编码新建一个手势对象。也可以直接使用interface builder图形化开发工具,在storyboard中拉入一个手势对象到视图控制器类中,再将此手势对象建立一个IBACTION,名称可以是dismissKeyboard。

第四种方法,通过轻击键盘之外的空白区域关闭虚拟键盘。

将屏幕上的view也就是textField的父视图拖一个touch down事件出来,和一个能关闭虚拟键盘的方法连接。如果视图没有touch down事件,可将view的父类从UIView修改为UIButton。 首先定义并实现一个方法backgroundTap:。


(IBAction) backgroundTap:(id)sender 
{ 
NSArray *subviews = [self.view subviews]; 
for (id objInput in subviews) { 
if ([objInput isKindOfClass:[UITextField class]]) { 
UITextField *theTextField = objInput; 
if ([objInput isFirstResponder]) { 
[theTextField resignFirstResponder]; 
} 
} 
} 
} 
- (IBAction) backgroundTap:(id)sender
{
NSArray *subviews = [self.view subviews];
for (id objInput in subviews) {
if ([objInput isKindOfClass:[UITextField class]]) {
UITextField *theTextField = objInput;
if ([objInput isFirstResponder]) {
[theTextField resignFirstResponder];
}
}
}
}