ios code或xib下实现按键或触摸背景关闭虚拟键盘



ios关闭虚拟键盘有很多种方式,现在记下来,供大家查阅:




1,点击虚拟键盘的return键来实现关闭键盘

xib/storyboard模式

ios code或xib下实现按键或触摸背景关闭虚拟键盘_第1张图片

在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,如下图:

ios code或xib下实现按键或触摸背景关闭虚拟键盘_第2张图片

改完之后,右键选中该view,惊奇的发现它竟然有了好多的events,那么找到 touch down 连接到.h类,创建一个关闭键盘的事件,之后的操作跟上边第一种一样:

ios code或xib下实现按键或触摸背景关闭虚拟键盘_第3张图片

运行一下,触摸键盘外的区域,是不是轻松隐藏掉了?





----------------------------------------------------------------------------------------------------------------------------------------------------------------

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];
    }
}

    以上代码是在一个viewController里面,if语句中的判断self.view指的就是背景。
    touchesBegan:withEvent:是声明在UIResponder中的一个函数,当一个或多个手指在view或者window上触摸时会调用该函数。默认没有做任何事情。这里重写它。




目前就先记录这么多吧。






你可能感兴趣的:(ios code或xib下实现按键或触摸背景关闭虚拟键盘)