专栏首页mukekeheart的iOS之旅ios学习——键盘的收起

ios学习——键盘的收起

  在开发过程中,我们经常会用到UITextField、UITextView等文本框,然后这些文本框在点击之后会自动成为第一响应者(FirstResponder),并自动弹出软键盘。然而,没有自动定义好的软键盘的回收。今天,我在开发过程中就遇到了这个问题,首先,软键盘收起会发生在两种情况下,一是当前区域为非第一响应者,二是当前区域的输入结束。具体解决方案有两种:

1、在当前页面设置点击事件,当点击事件发生时,注销当前视图的第一响应者或者设置当前摄入结束。当点击事件发生在非选中区域时,则键盘会自动回收:

1 //在viewDidLoad中 添加点击手势,为了关闭键盘的操作
2 UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)];
3 tap1.cancelsTouchesInView = NO;
4 [self.view addGestureRecognizer:tap1];
//点击空白处的手势要实现的方法,设置当前输入结束
-(void)viewTapped:(UITapGestureRecognizer*)tap1
{
    [self.view endEditing:YES];  
}

 这种方法对于视图上的任何UITextField、UITextView等文本框都有效,不需要对每一个UITextField、UITextView等文本框进行进行设置。

2、利用键盘上的 回车键 来进行设置当前UITextField、UITextView等文本框不是第一响应者,这种方法对UITextField、UITextView的应用不一样,需要区别进行。

  对于UITextField,相应的UITextFieldDelegate有相关的处理

1 //设置回车键的类型和代理
2 self.themeTextField.returnKeyType = UIReturnKeyDone;
3 self.themeTextField.delegate = self ;
1 #pragma mark - textField delegate
2 - (BOOL)textFieldShouldReturn:(UITextField *)textField {
3     [textField resignFirstResponder];
4     //[self.view endEditing:YES];
5     return YES;
6 }

   对于UITextView,相应的UITextViewDelegate并没有相应的处理回车键的方法。但是,我们可以根据UITextViewDelegate提供的方法对键盘输入的值进行判断,如果为回车键(\n)则设置当前UITextView不是第一响应者,否则不操作。

1 //设置回车键的类型和代理,当前类是继承自UITextView的一个类 
2 self.delegate = self ; 
3 self.returnKeyType = UIReturnKeyDone ;
//UITextViewDelegate代理,当键盘输入变化时调用,可以通过该方法判断输入的内容
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
 replacementText:(NSString *)text
{
    //判断是否是回车键
    if ([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder];
        return NO;
    }
    return YES ;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS学习——UIPickerView的实现年月选择器

      最近项目上需要用到一个选择器,选择器中的内容只有年和月,而在iOS系统自带的日期选择器UIDatePicker中却只有四个选项如下,分别是时间(时分秒)、日...

    mukekeheart
  • iOS学习——iOS原生实现二维码扫描

      最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二...

    mukekeheart
  • iOS学习——属性引用self.xx与_xx的区别

     在iOS开发过程中,我们用@proprety声明一个属性后,在代码中我们可以用self.xx与_xx来获取到这个属性。但是一直有一个疑惑,那就是这两个之间有...

    mukekeheart
  • 理解unittest测试框架(三)——结果处理

    前文说到了测试的核心,用例的处理,这篇文章来说说unittest框架对于测试结果的处理方式。

    点点寒彬
  • iOS AVPlayer视频播放器

    且行且珍惜_iOS
  • 回归

    看一下损失函数的导函数tanh(x),当x偏离0时,tanh(x)趋向+1或者-1

    用户1733462
  • python DbUtils 使用教程

    https://pypi.python.org/pypi/DBUtils/1.2

    py3study
  • 强化学习/增强学习/再励学习介绍 | 深度学习 | 干货分享 | 解读技术

    Deepmind团队在17年12月5日发布的最新Alpha Zero中,非常重要的一种方法就是强化学习(reinforcement learni...

    用户7623498
  • 以太坊源码机制:挖矿

    狗年吉祥,开工利是,我们继续研究以太坊源码。从本篇文章开始,我们会深入到以太坊核心源码中去,进而分析与研究以太坊的核心技术。 关键字:拜占庭,挖矿,矿工...

    文彬
  • 从0开始实现一个Adaboost分类器(完整代码)

    日前,通俗易懂的推导了三种集成学习的原理及主要公式,今天本文基于Python从0开始手动实现一个Adaboost分类器,文中提供完整代码。

    luanhz

扫码关注云+社区

领取腾讯云代金券