iOS监听事件方法(推荐顺序从上往下)
- addTarget:方法监听:
1. 适用范围:UIControl及其子类
2. 数据通讯范围:本文件内- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
手势
1. 适用范围:UI控件
2. 数据通讯范围:本文件内
3. 不足:手势冲突问题block
1. 数据通讯范围:框架内所有文件
2. 作为成员变量或者作为方法的参数回调block
3. 优点:多文件间监听方便,高级开发人员多用block
4. 不足:要注意block对self、_成员属性的强引用造成的循环引用代理
1. 适用范围
a 1个对象只能设置一个代理(假设这个对象只有1个代理属性)
b 1个对象能成为多个对象的代理
2. 数据通讯范围:框架内所有文件
3. 比通知规范,建议适用代理多于通知通知
1. 适用范围
a 1个对象可以发通知给N个对象
b 1个对象可以接受N个对象发出的通知
2. 数据通讯范围:框架内所有文件
3. 必须得保证通知的名字在发出和监听时是一致的
4. 详见"NSNotificationCenter""NSNotification"章节KVO
1. 适用范围:仅仅是能监听对象属性的改变(灵活度不如通知和代理)
2. 数据通讯范围:本文件内
3. 本质是为每一个监听对象添加一个观察者对象
4. 详见"KVO"-
利用内部的某些机制
1. 适用范围:某些特别的方法,比如重写UITextField的becomeFirstResponder
和resignFirstResponder
来监听UITextField的获得焦点和失去焦点事件
2. 数据通讯范围:本文件内/** * 调用时刻 : 成为第一响应者(开始编辑\弹出键盘\获得焦点) */ - (BOOL)becomeFirstResponder { // 设置占位文字颜色 self.zq_placeholderColor = [UIColor whiteColor]; return [super becomeFirstResponder]; } /** * 调用时刻 : 不做第一响应者(结束编辑\退出键盘\失去焦点) */ - (BOOL)resignFirstResponder { // 恢复默认占位文字颜色 self.zq_placeholderColor = [UIColor grayColor]; return [super resignFirstResponder];; }