响应方法和响应事件传递( 二 )


主要分为三个模块:
下一个响应者对象一些关于第一响应者的方法事件回调方法(响应处理的地方)
这里有一个值得注意的地方,对象中的这个第一响应者,和之前Hit-Test得到的第一响应者并不同 。通过测试发现,如果我们有A、B、C三个View,然后通过重写Hit-Test的方法控制B成为第一响应者,但是在页面加载出来之后调用C或者A的方法,却看不到任何变化 。
但是目前看来这个方法的用途是控制系统键盘的弹出和隐藏 。
首先,通过Hit-Test得到的第一响应者会优先触发它的时间回调方法,如果它并未重写该事件的方法,则会调用的实现,的实现就是找到下一个响应者对象,并且调用它的该事件方法,以此类推 。
因此,如果一个响应者想要拦截这个事件,不让它继续往下传,只需要重写这个事件的回调方法,并且不调用super的这个方法就可以了 。
在事件回调方法中包含NSSet对象和对象,NSSet对象中包含一个或者多个对象,下面我们简单介绍一下这两个重要的类,和
事件处理机制的应用 手势控制器
UIKit封装有类及它的基类来简化手势的监听处理 。也是基于上述的事件回调方法来实现的,只是做了进一步的封装

响应方法和响应事件传递

文章插图
手势控制器的种类使用Hit-Test来扩大点击范围
可以重写的::方法,来定义控件的响应范围,多用来增大按钮的点击范围或者增大的滑动范围 。
处理兄弟控件的事件
可以重写的::方法,定义控件的响应范围为兄弟组件的显示范围,一次来通过在兄弟控件上的触控,响应自己的事件 。
事件处理机制在系统控件中
目前一些系统组件有重写事件回调方法,并且做了一些特殊的事情 。以下是两个例子
重写了和方法,用来实现点击的高亮效果 。
重写了和方法,用来检测用户是不是真的有意图去滑动 。如果用户在300ms之内并未有移动的事件,则会调用super方法,将事件处理权下发到子组件,但如果300ms内有移动,则就不会调用super方法,只是执行滑动效果 。
参考资料
iOS事件机制
开发者官方文档
Touch 开发者官方文档