iOS利用响应链机制点击tableview空白处关闭键盘-可以作为参考
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空白处关闭键盘-可以作为参考的更多相关文章
- iOS开发经验——点击屏幕空白处退出键盘
一种比较简单的点击屏幕空白处退出键盘的方法: 在ViewController中加入如下代码: 1: -(void)touchesBegan:(NSSet *)touches withEve ...
- iOS事件响应链(Responder Chain)
概述 在iOS中,视图的层级一般都是 父视图->添加各种子视图.这时候某个视图(子视图)上有个按钮,需要我们交互.但是有时候我们会发现无论如何都没有反应.这时候可能就是我们对iOS的事件传递响应 ...
- iOS事件响应链
首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获 ...
- iOS 响应链
一.UIResponder app 使用响应者对象接收和处理事件,只有继承 UIResponder 的类,才能处理事件. UIApplication.UIView.UIViewController 都 ...
- 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理
1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈 跟踪信 ...
- IOS Swift UITableViewcontroller实现点击空白处隐藏键盘
在ios开发中,为了方便,我们经常使用UITableViewcontroller,比如搜索界面为了方便可能更多的使用UITableViewcontroller,那么问题就来了,当我点击搜索框的时候会弹 ...
- AJ学IOS(18)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
AJ分享,必须精品 先看图片 第一步完成tableView和Cell的架子的图 完善图片 键盘弹出设置后图片: 自动回复图: 粗狂的架子 tableView和Cell的创建 首相tableView为了 ...
- swift3.0 点击UIScrollView中输入框之外的区域关闭键盘
通过点击事件实现关闭键盘 scrollView: UIScrollView! title_textField: UITextField! let hideKeyboardTapGesture = UI ...
- iOS开发事件分发机制—响应链—手势影响
1.提纲 什么是iOS的事件分发机制 ? 一个事件UIEvent又是如何响应的? 手势对于响应链有何影响? 2.事件分发机制 2.1.来源 以直接触摸事件为例: 当用户一个手指触摸屏幕是会生成一个UI ...
随机推荐
- IIS7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。=
本文转载:http://www.cnblogs.com/ctcx/archive/2012/07/19/2599741.html 在 Microsoft Visual Studio 2010 打开看了 ...
- 海思android4.4 SDK编译Latin输入法
原来的HiSTBAndroidV500R001C01SPC020\device\hisilicon\bigfish\packages\apps\HiLatinIME\Android.mk内容例如以下: ...
- Emoji表情处理
//php对于 Emoji表情的处理 //当接收内容需要转换时: //preg_replace_callback('/[\xf0-\xf7].{3}/','cal_fun', $str) functi ...
- 还在用ListView?
还在用Lisview?RecyclerView都已经出来一年多了! 想必大家多或多或少的接触过或者了解过RecyclerView,为什么没有用起来,原因大概如下? ListView我用的挺好的,为什么 ...
- windows下安装redis和php的redis扩展
1.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(s ...
- "_Default"同时存在于两个dll文件中的解决办法
编译器错误消息:CS0433: 类型“_Default”同时存在于“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Fi ...
- Node.js + Express + Mongodb 开发搭建个人网站(一)
一.Node + Express环境搭建 0.去Node官网下载安装node,如果安装了 npm 和 node的话 那么就 安装 全局的 express,-g全局安装 npm install expr ...
- js实现图片自动切换效果。
js实现图片自动切换效果,简单实用,原谅我只是一只小菜鸟还在学大神天天写博文装逼. <script language="javascript"> setInterval ...
- JS计算指定日期是距今的第几周,星期几
无意中在百度知道上发现这样一个问题,就抽时间见写了一个函数. 首先我们需要明确,既然是指定日期距今的第几周,那么就要知道指定的日期是什么,而且是不能确定的,会根据使用者不同而得到不同的日期,所以我们需 ...
- iOS如何准确获取通知
iOS获取通知需要注意以下三个地方iOS 设备收到一条推送(APNs),用户点击推送通知打开应用时,应用程序根据状态不同进行处理需在 AppDelegate 中的以下两个方法中添加代码以获取apn内容 ...