在使用UITextField的时候,我们会和键盘打交道,有时候要求弹出来的键盘类型是数字键盘,有时候要求我们弹出来的是一般的键盘。当我们输入完成的时候,就涉及到在上什么时候收回键盘的事情了。收回键盘分下面的情况来讨论。

大体来说,收起键盘的方法有:

  • 让textFiled放弃成为第一响应者(resignFirstResponder)
  • 让view或者子view强制结束编辑状态(endEditing)

1.输入完以后用户点击return后收起键盘。

可以点击return收起键盘并不意味着弹出来的键盘一定都有return这个按键,比如数字键盘类型就没有,UIKeyboardTypeWebSearch类型的键盘return键就变成了Go键,需要注意的是这时候的Go键相当于return键。

要想实现点击return让键盘收起,首先需要设置textField代理,当然还有遵循UITextFieldDelegate协议:

_textField.delegate = self;

然后实现协议方法- (BOOL)textFieldShouldReturn:(UITextField *)textField;,当然你也可以在这个方法里 main实现一些需求逻辑,比如判断输入的内容符不符合要求等。

- (BOOL)textFieldShouldReturn:(UITextField *)textField{return [textField resignFirstResponder];
}

2.点击背景后收起键盘

点击背景收起键盘可以实现view的- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event方法,然后执行view的- (BOOL)endEditing:(BOOL)force;方法。

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{[self.view endEditing:YES]; //实现该方法是需要注意view需要是继承UIControl而来的
}

还有一些比较笨的方法也可以实现达到点击背景后收起键盘的效果,比如:在背景view上面加手势,添加UIButton或者view,然后在对应的点击事件的监听方法中实现resignFirstResponder或者endEditing

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyboardHide:)];
//设置成NO表示当前控件响应后会传播到其他控件上,默认为YES。
tapGestureRecognizer.cancelsTouchesInView = NO;
//将触摸事件添加到view上
[self.view addGestureRecognizer:tapGestureRecognizer];
-(void)keyboardHide:(UITapGestureRecognizer*)tap{  [textFiled resignFirstResponder];
}

3.不用view实现endEditing的方法

如果说在比较难获取viewController的view时,可以使用下面的方法:

[[[UIApplication sharedApplication] keyWindow] endEditing:YES];

或者

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];

结尾

在项目中还得根据情况选择使用哪一种方法,我想掌握上面的这些方法差不多就够了,祝大家玩得愉快!如果你觉得我的文章对你有帮助,不妨任性打赏

iOS中收起键盘的几种方式相关推荐

  1. IOS中延时执行的几种方式的比较

    本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.perf ...

  2. ios swift收起键盘

    文章目录 1.示例代码 2.键盘管理的第三方框架 1.示例代码 override func touchesBegan(_ touches: Set<UITouch>, with event ...

  3. IOS收起键盘的几种办法(摘抄自唐巧《iOS开发进阶》)

    在UIViewController中收起键盘,除了调用相应控件的resignFirstResponder方法外,还有另外3种方法: 1.重载UIViewController中的touchesBegin ...

  4. ios多线程开发的常用三种方式

    ios多线程开发的常用三种方式 1.NSThread 2.NSOperationQueue 3.GCD NSThread: 创建方式主要有两种: [NSThread detachNewThreadSe ...

  5. android获取自定义属性,android 自定义控件中获取属性的三种方式(转)

    第一种方法,直接设置属性值,通过attrs.getAttributeResourceValue拿到这个属性值. (1)在xml文件中设置属性值 android:layout_width="f ...

  6. ios页面间传递参数四种方式

    ios页面间传递参数四种方式 1.使用SharedApplication,定义一个变量来传递. 2.使用文件,或者NSUserdefault来传递 3.通过一个单例的class来传递 4.通过Dele ...

  7. 在Windows 10中截取截图的6种方式 简介

    在Windows 10中截取截图的6种方式 简介 截图对于不同的目的很重要.它可以用于捕获笔记本电脑上的任何内容的截图.所以,如果你使用Windows 10,你可能不知道如何截图,因为它是比较新的.因 ...

  8. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

  9. mysql 执行cmd,mysql命令行中执行sql的几种方式总结

    1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013 ...

最新文章

  1. window下使用虚拟机安装Linux操作系统CentOS
  2. python第三方库中函数调用_Python学习笔记(2)——Python的函数、模块、包和库...
  3. mysql脚本文件长什么样_在linux下执行mysql脚本文件,内容是创建一个FUNCTION,总是报错,请帮看下原因是什么?多谢...
  4. Mac OS使用技巧之十六:系统失去响应怎么办?
  5. if...else 应用(猜幸运数字)
  6. 夏泽网 中国渔业统计年鉴年鉴资料网
  7. Android版微信跳一跳小游戏如何利用技术手段达到高分!
  8. 南开计算机考研难么,我的一点考研心得
  9. ubuntu 19查看和修改时区
  10. 3541. 代码查重
  11. 跟着 Apple 中国学习顶级中文文案排版
  12. Flex 桌面应用 adl 调试模式运行
  13. python——正则表达式详解(二)
  14. tftpd32服务器软件在Windows与linux 下的文件传输
  15. 模型无关的全局特征依赖分析方法 I ——部分依赖曲线分析与条件依赖曲线分析
  16. Go语言核心之美 1.2-变量及声明篇
  17. V部落-微信小程序版博客
  18. 分布式团队的高效站立会说明书
  19. Ed2k协议背景介绍及eMule协议的整体架构
  20. FRP (高性能反向代理应用)

热门文章

  1. 沧州师范学院计算机科学与技术专业怎么样,沧州师范学院有哪些院系和专业-什么专业比较好...
  2. 计算机上怎么计算开三次方,怎么用计算器开出三次方,具体怎么操作
  3. oracle运维系列0:Oracle installClient 安装
  4. 2016,再见 2017,还请多多指教
  5. Ui 组件库 (移动端)
  6. 阿里云com域名价格表、注册券和续费口令
  7. 【深度学习模型】扩散模型(Diffusion Model)基本原理及代码讲解
  8. mysql基因测序_基因融合检测数据库介绍
  9. 动画属性 @keyframes
  10. 专题:手把手学习硬件基础------13、EMC和ESD