iOS监听方法汇总

iOS监听事件方法(推荐顺序从上往下)

  1. 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的becomeFirstResponderresignFirstResponder来监听UITextField的获得焦点和失去焦点事件
    2. 数据通讯范围:本文件内

    /**
     *  调用时刻 : 成为第一响应者(开始编辑\弹出键盘\获得焦点)
     */
    - (BOOL)becomeFirstResponder
    {
        // 设置占位文字颜色
        self.zq_placeholderColor = [UIColor whiteColor];
    
        return [super becomeFirstResponder];
    }
    
    /**
     *  调用时刻 : 不做第一响应者(结束编辑\退出键盘\失去焦点)
     */
    - (BOOL)resignFirstResponder
    {
        // 恢复默认占位文字颜色
        self.zq_placeholderColor = [UIColor grayColor];
    
        return [super resignFirstResponder];;
    }
    

你可能感兴趣的:(iOS监听方法汇总)