http://www.jianshu.com/p/9717b792599c   是原文地址

处理关闭键盘的做法一般分为两种:1.放弃第一响应者身份;2.当前视图结束编辑。通常情况下只要我们在合适的时机去做这两件事的任意一种,都会很稳妥的如我们所愿----关闭键盘。但是,总有那么一些特殊情况使我们不能如意的关闭键盘,比如:在tableviewcell上有一个textfiled或者textview时,我们想要点击背部空白关闭键盘时确不能如愿。现在,我们一步一步的来解决这个问题,首先我们创建一个这样的界面:

 

我们在要点击屏幕空白处收起键盘最常见的处理方法是在刚点击的方法中放弃第一响应者身份或者结束编辑,如图

 

但是运行后发现这个方法不执行,于是我们最常用的而且一用就成功的方法遭遇了tableview这个刺儿头就不灵了。按照我们的理解,只要我们与界面有任何交互运动,touchsBegan的方法就一定会执行,但是我们在这里打断点显示却是没有执行,这是为什么呢?一般在viewController中实现这个方法,点击背景时,这个方法就会执行,于是在tableviewController我们也潜移默化的认为tableviewController下的tableview也会执行这个方法,其实不然,因为tableviewController也是由viewController封装而成,所以真正执行touchsBegan的还是这个viewController下的view。

好了,既然这样不行,那我们就给tableview加个tap手势吧,代码如下:

 

然后我们再次运行程序看看效果。。。。好嘞,终于键盘如愿关闭了,需求解决,不用加班了,于是收拾书包准备回家呗。。。可是产品wang的声音在你即将双脚跨出办公室门外的0.0001秒之前将你叫了回来:“怎么点击cell不能跳转了,还有删除cell也删除不了了?” 于是原本欣喜的心情瞬间如一万头草泥马在心头奔腾而过,回家的愿望破灭了,放下书包继续撸代码。。。。(tap手势覆盖了tableview里面自带的手势,于是就不执行didselect...的方法)

现在就利用响应链机制来解决这个问题,事件响应链机制我就不在这儿细说了,官方资料讲的很明白了,主要就是查找事件源(调用hitTest...查找)和反馈给系统处理(调用.nextResponse),所以现在我们只需在点击tableview的事件反馈给appdelegate处理之前关闭键盘就可以了,这样既关闭了键盘,又不会由于覆盖tableview封装的手势而导致cell的手势操作异常问题。方法步骤如下:

1.由于我是用storyboard创建的界面,所以先创建一个继承自UItableview的类,然后与storyboard里面tableview关联。(纯代码一样)

2.在这个类中实现hitText...的方法如下所示:

 

这段代码的意思就是点击的是tableview就结束编辑并且返回tableview本身,这样就不影响了tableview本身的操作,然后点击的是tableview的子视图的时候就返回子视图就行了。

好了,再次运行程序,十指飞快的测试,bingo没问题,背上书包光年速度飞奔回家!

文/麦克学会了摇滚(简书作者)
原文链接:http://www.jianshu.com/p/9717b792599c
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

iOS利用响应链机制点击tableview空白处关闭键盘-可以作为参考的更多相关文章

  1. iOS开发经验——点击屏幕空白处退出键盘

          一种比较简单的点击屏幕空白处退出键盘的方法: 在ViewController中加入如下代码: 1: -(void)touchesBegan:(NSSet *)touches withEve ...

  2. iOS事件响应链(Responder Chain)

    概述 在iOS中,视图的层级一般都是 父视图->添加各种子视图.这时候某个视图(子视图)上有个按钮,需要我们交互.但是有时候我们会发现无论如何都没有反应.这时候可能就是我们对iOS的事件传递响应 ...

  3. iOS事件响应链

    首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获 ...

  4. iOS 响应链

    一.UIResponder app 使用响应者对象接收和处理事件,只有继承 UIResponder 的类,才能处理事件. UIApplication.UIView.UIViewController 都 ...

  5. 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理

    1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈 跟踪信 ...

  6. IOS Swift UITableViewcontroller实现点击空白处隐藏键盘

    在ios开发中,为了方便,我们经常使用UITableViewcontroller,比如搜索界面为了方便可能更多的使用UITableViewcontroller,那么问题就来了,当我点击搜索框的时候会弹 ...

  7. AJ学IOS(18)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复

    AJ分享,必须精品 先看图片 第一步完成tableView和Cell的架子的图 完善图片 键盘弹出设置后图片: 自动回复图: 粗狂的架子 tableView和Cell的创建 首相tableView为了 ...

  8. swift3.0 点击UIScrollView中输入框之外的区域关闭键盘

    通过点击事件实现关闭键盘 scrollView: UIScrollView! title_textField: UITextField! let hideKeyboardTapGesture = UI ...

  9. iOS开发事件分发机制—响应链—手势影响

    1.提纲 什么是iOS的事件分发机制 ? 一个事件UIEvent又是如何响应的? 手势对于响应链有何影响? 2.事件分发机制 2.1.来源 以直接触摸事件为例: 当用户一个手指触摸屏幕是会生成一个UI ...

随机推荐

  1. C语言学习_一个简单程序的解释与C学习方法概括

    简单计算器程序示例: # include <stdio.h> //1.头文件 //2.加法函数 int add(int a,int b)//3.函数定义方式 { //4.函数体 retur ...

  2. 【设计模式 - 16】之迭代器模式(Iterator)

    1      模式简介 迭代器模式是JAVA中非常常用的模式,List.Map.Set等常见集合中都封装了迭代器Iterator. 迭代器模式的介绍: 迭代器模式用于顺序访问集合对象中的元素,而不需要 ...

  3. 【转】Android通过Wifi来调试你的应用

    http://stormzhang.com/android/2014/08/27/adb-over-wifi/ 在Android中调试我们经常要用一根USB数据线连接到手机和电脑,一方面麻烦不说,手机 ...

  4. VMware-workstation-full-12.0.1-3160714

    https://download3.vmware.com/software/wkst/file/VMware-workstation-full-12.0.1-3160714.exe 5A02H-AU2 ...

  5. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(26)-权限管理系统-分配角色给用户

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(26)-权限管理系统-分配角色给用户 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x ...

  6. mxGraph实现按住ctrl键盘拖动图形实现复制图形功能

    实现这个功能很easy,仅仅须要重写moveCells方法就能够了.以下是源文件里的代码: mxGraph.prototype.moveCells = function(cells, dx, dy, ...

  7. node.js 安装

    http://my.oschina.net/zhangdapeng89/blog/52793 windows 自带的 ims文件安装后 有 安装npm 点击bat文件可自动安装 npm 1安装 nod ...

  8. photoshopcs5 win7安装报错的解决

    因为之前安装了绿色中文破解版的PhotoShop CS5,虽然卸载了,但是注册表还可能残留了其它信息,导致在安装Adobe PhotoShop CS5英文版时一直显示 (Exit Code: 7 ER ...

  9. JSP-注释,脚本元素,指令

    jsp中的注释 jsp隐藏注释 完全对客户机隐藏,不会将注释内容发送给客户机. 其语法格式为:<%-- comment --%> comment为要添加的文本注释内容. HTML注释 不完 ...

  10. centos 6 搭建ftp服务器支持匿名读写

    转载请注明: 凌云物网智科嵌入式实验室: http://iot-yun.com/     郭文学<guowenxue@gmail.com> vsftpd在运行时一定要关闭SELinux,否 ...