事件传递

【响应链】cocoatouch事件处理流程深入解析

百般思念 提交于 2019-12-05 13:19:56
###cocoatouch 事件处理流程 apple 文档 传递链和响应链 传递链:由系统向离用户最近的view传递。UIKit –> active app’s event queue –> window –> root view –>……–>lowest view 响应链:由离用户最近的view向系统传递。initial view –> super view –> …..–> view controller –> window –> Application 在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResponder的子类. 用户触摸屏幕的地方。事件将沿着响应者链一直向下传递,直到被接受并做出处理。 一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理, 如果它不处理,事件就会被传递给它的视图控制器对象viewcontroller(如果存在), 然后是它的父视图(superview)对象。 ###避开事件处理 UIView不接受触摸事件的三种情况: 1.不接收用户交互 userInteractionEnabled = NO 2.隐藏 hidden = YES 3.透明 alpha = 0.0 ~ 0.01 注意:UIImageView的userInteractionEnabled默认就是NO,

Android中点击空白区域控件自动隐藏(事件传递机制中的一个小例子)

余生长醉 提交于 2019-12-05 11:39:53
随着android技术日趋成熟,android应用程序已经由刚开始的单纯效果展示变得越来越艺术话了,各种动画,各种布局层叠,那么由此就产生了一些问题,比如:一个listview的view的item点击时没有反应,界面上罩了层好看的蒙版后,下面的布局中的控件点击时无反应等。 今天我在修改bug的时候就遇到了这样的问题。 一、item点击时没有反应 原因:你的item中有button或者checkbox等控件,默认情况下焦点focus是最先交给这些子控件,而ListView的Item能被选中的基础是它能获取Focus焦点。 解决办法: 1、将item layout的根控件设置属性(android:descendantFocusability=”blocksDescendant”),以下是item的布局 <!-- lang: java --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#F4F2EE" android:descendantFocusability="blocksDescendants"

iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用

余生长醉 提交于 2019-12-01 22:30:24
iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用 一、引言 在iOS系统中,手势是进行用户交互的重要方式,通过UIGestureRecognizer类,我们可以轻松的创建出各种手势应用于app中。关于UIGestureRecognizer类,是对iOS中的事件传递机制面向应用的封装,将手势消息的传递抽象为了对象。有关消息传递的一些讨论,在前面的博客中有提到: iOS事件响应控制: http://my.oschina.net/u/2340880/blog/396161 。 二、手势的抽象类——UIGestureRecognizer UIGestureRecognizer将一些和手势操作相关的方法抽象了出来,但它本身并不实现什么手势,因此,在开发中,我们一般不会直接使用UIGestureRecognizer的对象,而是通过其子类进行实例化,iOS系统给我们提供了许多用于我们实例的子类,这些我们后面再说,我们先来看一下,UIGestureRecognizer中抽象出了哪些方法。 1、统一的初始化方法 UIGestureRecognizer类为其子类准备好了一个统一的初始化方法,无论什么样的手势动作,其执行的结果都是一样的:触发一个方法,可以使用下面的方法进行统一的初始化: - (instancetype)initWithTarget:(nullable