ios关闭虚拟键盘有很多种方式,现在记下来,供大家查阅:
1,点击虚拟键盘的return键来实现关闭键盘
xib/storyboard模式
在xib下,打开TextField或TextView控件,右键选中:Did End On Exit事件拖拽到相应的.h 类中,创建一个此事件。
在.m中实现:
-(IBAction)textFiledReturnEditing:(id)sender { [sender resignFirstResponder]; }这样,每当你点击键盘上的return键时,它就会自动隐藏了。
如果你使用代码的方式构建UI界面,那么更简单了:
[searchField addTarget:self action:@selector(textFiledReturnEditing:) forControlEvents:UIControlEventEditingDidEndOnExit];
2,通过触摸键盘外的空白区域,关闭键盘。
那么xib下的实现方式是:
选中包含textfield的viewcontroller最外层的view(也就是self.view),在属性区域把它原本的父类(uiview)改成UiControl,如下图:
改完之后,右键选中该view,惊奇的发现它竟然有了好多的events,那么找到 touch down 连接到.h类,创建一个关闭键盘的事件,之后的操作跟上边第一种一样:
运行一下,触摸键盘外的区域,是不是轻松隐藏掉了?
----------------------------------------------------------------------------------------------------------------------------------------------------------------
3,code下实现触摸关闭键盘
可是,我遇到了一个问题,我是用code方式构建的UI界面,现在同样想实现触摸屏幕隐藏键盘,可是我不知道如何把self.view通过代码的方式转换成UiControl,self.view 也没有addTarget的方法,那该如何是好呢?终于又找到几种方法:
3-1 添加触摸手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; [self.view addGestureRecognizer:tap]; [tap release];
-(void)dismissKeyboard { [searchField resignFirstResponder]; }加上这两段代码,轻松实现关闭键盘,可是遇到另一个麻烦,我这个界面有UiTableview,我发现UITableViewCell竟然无法触发
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 事件,经过多次调试,终于发现是上边的代码导致的,看来目前这种方法不能在这样的环境下使用。
3-2 实现 touchesBegan 方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch = [touches anyObject]; UIView *view = (UIView *)[touch view]; if (view == self.view) { [searchField resignFirstResponder]; } }
目前就先记录这么多吧。