美文网首页Swift
ZHRefresh一行代码搞定上拉加载,下拉刷新(Swift v

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

作者: CharlesAir | 来源:发表于2018-05-14 23:15 被阅读455次
    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

    相关文章

      网友评论

        本文标题:ZHRefresh一行代码搞定上拉加载,下拉刷新(Swift v

        本文链接:https://www.haomeiwen.com/subject/phrsdftx.html