这一片介绍 MJRefresh 刷新控件原理,也不知道需要几篇。
MJRefresh 如何添加头部试图 ?
答:通过类目和 runtime
方式
1 | #import <UIKit/UIKit.h> |
文件 UIScrollView+MJRefresh 中为 UIScrollView 添加了 MJRefresh 的类目
接下来看一下 UIScrollView+MJRefresh.m
中设置头部视图的实现,这里本质上是通过 runtime
的 objc_setAssociatedObject
函数为 UIScrollView
绑定了 mj_header 属性对象
1 |
|
从上面代码看到,当设定头部视图的时候,首先判断是否一致,然后删除之前的透视图,然后将传入的头部师徒插入到位置 0 ,然后通过 objc_setAssociatedObject() 函数将 mj_header 绑定成 UIScrollView 的对象,同理,当获取头部试图的时候,通过 objc_getAssociatedObject() 就可以得到头部视图 footer 也是一样的操作。
总结:
- 下拉刷新的 UI 控件是 UITableView 和 UICollectionView,所以对它们共有的父控件 UIScrollView 采取添加 header 的操作
- 类目拓展功能在 iOS 封装组件中常用,比如 SDWebImage 中 UIImageView 的类目方式使用该框架设置图片
- 类目不能添加属性,但是可以通过 runtime 的方式做到添加属性,在实现 set/get 放阿飞即可