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];;
    }
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,187评论 6 13
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,009评论 19 139
  • 火的发明让人类与动物分开,文字的发明使得人类进入了文明社会,汉字作为世界上最古老的文字,并且使用至今,它在...
    abby7021阅读 1,901评论 0 1
  • 嘿,我最亲爱的不知道在哪个角落迷路的你: 很冒昧,我突然写了这封信给你。只是因为,我今天在寒风中瑟缩着的时候,突然...
    陈袅袅阅读 6,386评论 279 321