自定义view中包含uiimageView,无法响应事件的处理
一.对userInteractionEnabled的理解
view是否能响应用户事件,除view在交互响应链之外,还由View的userInteractionEnabled属性决定。
- 当前视图设为view.userInteractionEnabled = NO 时,当前视图不可交互,该视图上面的子视图也不可与用户交互(不可响应即被该视图忽视),响应事件传递到其父视图。
- 当前视图设为view.userInteractionEnabled = YES 时,当前视图可交互,该视图上面的子视图可以用户交互(可以响应即被视图接受),其父视图不会接收到响应。
UIImageView 默认的userInteractionEnabled是NO;
UILabel默认 userInteractionEnabled是NO;
UIView的userInteractionEnabled默认是YES。
当视图对象的userInteractionEnabled设置为NO的时候,用户触发的事件,如触摸事件,键盘弹出事件。。等,将会被该视图忽略(其他视图照常响应),并且该视图对象也会从事件响应队列中被移除。当userInteractionEnabled设为YES时,则事件可以正常的传递给该视图对象。
注意::响应者链是能够响应事件的对象组成的链,事件在该链上传递,最终结果事件或被处理或被抛弃。所以一个对象在不在响应者链里是其能否响应事件的首要前提条件!
二. 自定义UIImageView中的View无法响应事件
一般自定义UIImageView是一种比较常见的应用,但是往往容易忘记一点,UIImageView默认是不能响应用户事件的,所以需要首先将UIImageView的userInteractionEnabled属性设置为YES
三. 自定义View包含view(有userInteractionEnabled = no,也有userInteractionEnabled = yes)
如果现在只想让这个自定义view响应用户事件,其子View不相应,那么自定义View的userInteractionEnabled应该等于yes,
而其所以子view的userInteractionEnabled应该设置为NO