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
网友评论