Swift

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

2018-05-14  本文已影响455人  CharlesAir
try your best

ZHRefresh

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


MyZone


Contents

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


支持哪些控件刷新

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

如何安装

因为该框架是基于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

具体结构如下图:

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
上一篇 下一篇

猜你喜欢

热点阅读