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 ...
随机推荐
- Java 执行jar linux 实例
需求:通过执行jar的方式 ,把某个文件路径下的用户数据同步到redis 1.main 函数 public class Main { private static Logger logger = Lo ...
- iOS开发总结-搜索功能实现--使用SKTag
TagsTableViewController.h 文件 #import <UIKit/UIKit.h> #import "personSearch.h" @inter ...
- hdu 4911 Inversion(归并排序求逆序对数)2014多校训练第5场
Inversion Time Limit: 20 ...
- JS为Select下拉框添加输入功能
JavaScript使用parentNode.nextSibling.value实现的本功能,实际上你会发现网页上有两个控件元素,一个是Select,一个是input,使用CSS将input覆盖于se ...
- ROS中Mangle解析
http://blog.csdn.net/bluecy/article/details/8192307
- mysql 安装配置详解
作为演示,是不可能完全模拟到生产环境的,因此不可能尽善尽美.由于是在virtualbox里面的centos6.5最小化安装版中安装配置mysql,因此前期的准备工作有很多,那么开始吧.添加一块硬盘,用 ...
- 理解JavaScript的定时器与回调机制
定时器方法 JavaScript是单线程的.虽然HTML5已经开始支持异步js了. JavaScript的setTimeout与setInterval看起来就像已经是多线程的了.但实际上setTime ...
- win 10 安装 mysql解压版 步骤
参考资料:win 10 安装 mysql 5.7 网址:http://blog.sina.com.cn/s/blog_5f39af320102wbk0.html 本文参考上面的网址的教程,感谢作者分享 ...
- 【转】iOS开发6:UIActionSheet与UIAlertView
原文: http://my.oschina.net/plumsoft/blog/42763 iOS程序中的Action Sheet就像Windows中的 “确定-取消”对话框一样,用于强制用户进行选择 ...
- const和volatile的区别
一.关键字const有什么含意? 只要一听到说:“const意味着常数”,就知道我正在和一个业余者打交道.去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embe ...