ZHRefresh一行代码搞定上拉加载,下拉刷新(Swift version)

try your best

ZHRefresh

Swift版的刷新控件, MJRefresh基于swift重写.


MyZone


Contents

swift版的下拉刷新框架, 一行代码搞定上拉加载, 下拉刷新.

  • 开始使用

    • 支持哪些控件刷新
    • 如何安装
    • 类结构
  • 常见API

    • ZHRefreshComponent.swift
    • ZHRefreshHeader.swift
    • ZHRefreshFooter.swift
    • ZHRefresh.swift
  • 使用例子

    • 参考
    • 下拉刷新(默认)
    • 下拉刷新(动画图片)
    • 等......

支持哪些控件刷新

继承自UIScollView的类都可以使用.如UIScrollView, UITableView, UICollectionView, WKWebView, UIWebView...

如何安装

  • 使用CocoaPods安装

因为该框架是基于swift的, 所以请确保打开use_frameworks!的注释, 允许使用动态库.


pod 'ZHRefresh'

然后


pod install

在需要使用该框架的地方


import ZHRefresh

即可


类结构

类结构

常见API

ZHRefreshComponent.swift


  /// 正在刷新的回调

 public var refreshingBlock: ZHRefreshComponentRefreshingBlock?

  /// 开始刷新后的回调(进入刷新状态后的回调)

 public var beginRefreshingCompletionBlock: ZHRefreshComponentbeiginRefreshingCompletionBlock?

  /// 结束刷新的回调

 public var endRefreshingCompletionBlock: ZHRefreshComponentEndRefreshingCompletionBlock?

  /// 回调对象

 public weak var refreshTarget: AnyObject?

  /// 回调方法

 public var refreshAction: Selector?

ZHRefreshHeader.swift


  /// 类方法, 快速的创建下拉刷新控件

 public static func headerWithRefresing(target: AnyObject, action: Selector) -> ZHRefreshHeader

  /// 类方法, 快速的创建带有正在刷新回调的下拉刷新控件

 public static func headerWithRefreshing(block: @escaping ZHRefreshComponentRefreshingBlock) -> ZHRefreshHeader

  /// 忽略多少scrollView的contentInset的top

 public var ignoredScrollViewContentInsetTop: CGFloat = 0.0

  /// 上一次下拉刷新成功的时间

 public var lastUpdatedTime: Date?

ZHRefreshFooter.swift


  /// 带有回调target和action的footer

 static public func footerWithRefreshing(target: AnyObject, action: Selector) -> ZHRefreshFooter

  /// 类方法, 创建footer

 static public func footerWithRefreshing(block: @escaping ZHRefreshComponentRefreshingBlock) -> ZHRefreshFooter

  /// 提示没有更多数据

 public func endRefreshingWithNoMoreData()

  /// 重置没有更多数据

 public func resetNoMoreData()

ZHRefresh.swift


  /// header and footer

public extension UIScrollView {

  /// header

 @objc dynamic var header: ZHRefreshHeader? {

 get {

 return objc_getAssociatedObject(self, &ZHRefreshKeys.header) as? ZHRefreshHeader

 }

 set {

 if let newHeader = newValue {

 if let oldHeader = header {

 /// 如果有旧值, 删除它

 oldHeader.removeFromSuperview()

 }

 /// 添加新的

 self.insertSubview(newHeader, at: 0)

 /// 存储新值

 objc_setAssociatedObject(self, &ZHRefreshKeys.header, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_ASSIGN)

 }

 }

 }

  /// footer

 @objc dynamic var footer: ZHRefreshFooter? {

 get {

 return objc_getAssociatedObject(self, &ZHRefreshKeys.footer) as? ZHRefreshFooter

 }

 set {

 if let newFooter = newValue {

 if let oldFooter = footer {

 /// 如果有旧值, 删除它

 oldFooter.removeFromSuperview()

 }

 /// 添加新值

 self.insertSubview(newFooter, at: 0)

 /// 存储新值

 objc_setAssociatedObject(self, &ZHRefreshKeys.footer, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_ASSIGN)

 }

 }

 }

}

使用例子

参考

请下载源程序, 并打开附带的demo程序 Example->ZHRefresh.xcworkspace

  • MainViewController.swift 主入口

  • CollectionViewController.swift 提供collectionView相关的实例程序

  • TableViewController.swift提供tableView相关的实例程序

  • WebViewController.swift提供webView相关的实例程序

  • Example.swift提供模型数据

具体结构如下图:

image

以下截屏皆取自iPhoneX

下拉刷新(默认)

code:


  // MARK: - 下拉刷新 默认样式

 @objc func action01() {

  /// 设置回调, 一旦进入刷新状态 就会调用block

 self.tableView.header = ZHRefreshNormalHeader.headerWithRefreshing { [weak self] in

 guard let `self` = self else { return }

 self.loadNewData()

 }

  /// 进入刷新状态

  self.tableView.header?.beginRefreshing()

 }

screenShots:

image

下拉刷新(动画图片)

code:


  // MARK: - 下拉刷新 动态图片

 @objc func action02() {

  /// 一旦进入刷新状态 就会调用target的action, 也就是调用self的loadNewData

 self.tableView.header = ZHRefreshChiBaoZiHeader.headerWithRefresing(target: self, action: #selector(loadNewData))

  self.tableView.header?.beginRefreshing()

 }

screenShots:

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容