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!的注釋, 允許使用動態(tài)庫.


pod 'ZHRefresh'

然后


pod install

在需要使用該框架的地方


import ZHRefresh

即可


類結構

類結構

常見API

ZHRefreshComponent.swift


  /// 正在刷新的回調

 public var refreshingBlock: ZHRefreshComponentRefreshingBlock?

  /// 開始刷新后的回調(進入刷新狀態(tài)后的回調)

 public var beginRefreshingCompletionBlock: ZHRefreshComponentbeiginRefreshingCompletionBlock?

  /// 結束刷新的回調

 public var endRefreshingCompletionBlock: ZHRefreshComponentEndRefreshingCompletionBlock?

  /// 回調對象

 public weak var refreshTarget: AnyObject?

  /// 回調方法

 public var refreshAction: Selector?

ZHRefreshHeader.swift


  /// 類方法, 快速的創(chuàng)建下拉刷新控件

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

  /// 類方法, 快速的創(chuàng)建帶有正在刷新回調的下拉刷新控件

 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

  /// 類方法, 創(chuàng)建footer

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

  /// 提示沒有更多數(shù)據(jù)

 public func endRefreshingWithNoMoreData()

  /// 重置沒有更多數(shù)據(jù)

 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提供模型數(shù)據(jù)

具體結構如下圖:

image

以下截屏皆取自iPhoneX

下拉刷新(默認)

code:


  // MARK: - 下拉刷新 默認樣式

 @objc func action01() {

  /// 設置回調, 一旦進入刷新狀態(tài) 就會調用block

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

 guard let `self` = self else { return }

 self.loadNewData()

 }

  /// 進入刷新狀態(tài)

  self.tableView.header?.beginRefreshing()

 }

screenShots:

image

下拉刷新(動畫圖片)

code:


  // MARK: - 下拉刷新 動態(tài)圖片

 @objc func action02() {

  /// 一旦進入刷新狀態(tài) 就會調用target的action, 也就是調用self的loadNewData

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

  self.tableView.header?.beginRefreshing()

 }

screenShots:

image
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容