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



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

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




目前就先记录这么多吧。






  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值