刷新数据,是 iOS 开发过程中一个重要的操作,操作频率也非常高!现在一般刷新控件都直接使用 MJRefresh 这个第三方控件,后面将会详细讲解其原理,这一篇首先介绍系统的刷新控件 —— UIRefreshControl
UIRefreshControl
UITableViewController iOS 6 之后的属性 refreshControl
1 | refreshControl NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED; (nonatomic, strong, nullable) UIRefreshControl * |
这是 UITableViewController 中的声明,由此可知:
- refreshControl 是 UITableViewController 的属性,我们如果使用这个控件,就必须使用 UITableViewController;
- 后面的 NS_AVAILABLE_IOS(6_0) 说明是 iOS 6 才会支持这个控件
UIRefreshControl
1 |
|
这是 UIRefreshControl 的 API,从中可以看出:
- 通过 init 方法创建的控件有默认的 height 和 width
- 在 UITableViewController 中这个控件 frame 会被自动管理
- 当执行下拉刷新动作的时候,UIRefreshControl 会被 UIControlEventValueChanged 事件触发,所以我们可通过 addTarget 监听这个状态来执行相应的刷新方法
关于该 API 其他的地方可以通过其他的文章查看,比如 NS_ASSUME_NONNULL_BEGIN、NS_ASSUME_NONNULL_END 这一对宏,以及 null_resettable、nullable 这中关键字,还有 UI_APPEARANCE_SELECTOR
UITableViewController 中刷新控件具体使用参照代码:https://github.com/AliceHome/iOSRefreshDemo
思考
这里控件的使用是非常简单方便的,如果只是简单实现刷新的功能,或者修改下文案可以直接使用这个控件。当然,如果不满足当前项目开发需求,比如要做一些本地化的效果,那么就需要自定义刷新控件了,当然可以直接参照上面开发的 API 去设计自己的刷新控件。除此之外,就是使用其他第三方控件,比如 MJRefresh、EGORefresh(这个库当前也是挺好用的,但是不知不觉就被遗忘了)
下期预告:将介绍第三方 MJRefresh
未来设想:如果有机会有时间可以参照系统的 API 自己实现以下 refresh control