JTRefresh
语言
Swift4.0
Install(安装)
pod 'JTRefresh'
适用视图
UIScrollView, UITableView, UICollectionView, UIWebView
Use(使用)
- 设置控件高度,设置控件或者适用视图(UIScrollView等)的headerView/footerView的refresh_height属性(上拉以及下拉都是这个属性)
- 结束刷新,调用适用视图(UIScrollView等)的headerStopRefresh或者footerStopRefresh方法
Use-Normal(正常使用)
直接使用(UIScrollView,UITableView, UICollectionView调用)
- 只添加下拉刷新
// 默认隐藏最后刷新时间
addRefreshWithTarget(_ target: AnyObject, headerAction: Selector?, footerAction: nil)
// 显示最后刷新时间
addRefreshWithTarget(_ target: AnyObject, headerAction: Selector?, footerAction: nil, hiddenRefreshDate: false)
// (Optional)设置刷新视图高度(不设置有默认值)
scrollView.headerView?.refresh_height = 60
scrollView.footerView?.refresh_height = 40
- 只添加上拉刷新
addRefreshWithTarget(_ target: AnyObject, headerAction: nil, footerAction: Selector?)
- 添加下拉刷新和下拉刷新
addRefreshWithTarget(_ target: AnyObject, headerAction: Selector?, footerAction: Selector?, hiddenRefreshDate: Bool = true)
设置属性使用
- 添加下拉刷新
/// 初始化
// 默认隐藏刷新时间
let header = JTRefreshHeaderView(target: AnyObject, action: Selector, hiddenRefreshDate: Bool = true)
// or
let header = JTRefreshHeaderView(hiddenRefreshDate: false, { [weak self] in
// 1. 在这个闭包中调用的JTRefreshHeaderView,要弱引用,否则内存泄漏
// 2. 调用scrollView.headerStopRefresh()停止下拉刷新方法,也要弱引用
})
/// 设置属性
header.refresh_heigth = 50 (Optional 不设置有默认值)
header.refreshStatusLabel?.textColor = UIColor.red
header.refreshStatusLabel?.font = UIFont.systemFont(ofSize: 16, weight: .medium)
// func setStatusText(_ text: String, for state: JTRefresh.headerStatus)
header.setStatusText("header...0", for: .normal) // 下拉过程中
header.setStatusText("header...1", for: .readyRefresh) // 即将刷新(释放即可刷新)
header.setStatusText("header...2", for: .refreshing) // 刷新中
/// 添加
scrollView.headerView = header
- 添加上拉加载
/// 初始化
let footer = JTRefreshFooterView(target: AnyObject, action: Selector)
// or
let footer = JTRefreshFooterView({ [weak self] in
// 1. 在这个闭包中调用的JTRefreshFooterView, 要弱引用,否则内存泄漏
// 2. 调用scrollView.footerStopRefresh()停止上拉刷新方法,也要弱引用
})
/// 设置属性
footer.refresh_height = 40 // (Optional, 不设置有默认值)
footer.refreshStatusLabel?.textColor = UIColor.red
footer.refreshStatusLabel?.font = UIFont.systemFont(ofSize: 16, weight: .medium)
// func setStatusText(_ text: String, for state: JTRefresh.footerStatus)
footer.setStatusText("footer...0", for: .normal) // 上拉中
footer.setStatusText("footer...1", for: .readyLoad) // 即将加载(释放加载)
footer.setStatusText("footer...2", for: .loading) // 加载中
/// 添加
scrollView.footerView = footer
normal显示效果
Use-GIF(动画使用)
- 添加下拉刷新
/// 初始化
let gifHeader = JTRefreshGIFHeaderView(target: AnyObject, action: Selector, hiddenDate: Bool=true, hiddenStatus: Bool=false)
// or
let gifHeader = JTRefreshGIFHeaderView(hiddenDate: Bool=true, hiddenStatus: Bool=false, { [weak self] in
// 1. 在这个闭包中调用的JTRefreshGIFHeaderView, 要弱引用,否则内存泄漏
// 2. 调用scrollView.headerStopRefresh()停止上拉刷新方法,也要弱引用
})
/// 设置属性
// func setImages(_ images: Array<UIImage>?, for state: JTRefresh.headerStatus)
gifHeader.setImages([], for: .normal) // 下拉过程的动画图片
gifHeader.setImages([], for: .readyRefresh) // 即将刷新的动画图片
gifHeader.setImages([], for: .refreshing) // 刷新中动画图片
// func setStatusText(_ text: String, for state: JTRefresh.headerStatus)
gifHeader.setStatusText("gifHeader...0", for: .normal)
gifHeader.setStatusText("gifHeader...1", for: .readyRefresh)
gifHeader.setStatusText("gifHeader...2", for: .refreshing)
gifHeader.refreshStatusLabel?.textColor = UIColor.cyan
...
/// 添加使用
scrollView.headerView = gifHeader
- 添加上拉加载
/// 初始化
let gifFooter = JTRefreshGIFFooterView(target: AnyObject, action: Selector, hiddenStatus: Bool = true)
// or
let gifFooter = JTRefreshGIFFooterView(hiddenStatus: Bool = true, { [weak self] in
// 1. 在这个闭包中调用的JTRefreshGIFFooterView, 要弱引用,否则内存泄漏
// 2. 调用scrollView.footerStopRefresh()停止上拉刷新方法,也要弱引用
})
/// 设置属性
// setImages(_ images: Array<UIImage>?, for state: JTRefresh.footerStatus)
gifFooter.setImages(gifImages, for: .normal)
gifFooter.setImages([], for: .readyLoad)
gifFooter.setImages(gifImages, for: .loading)
// func setStatusText(_ text: String, for state: JTRefresh.footerStatus)
gifFooter.setStatusText("gifFooter...0", for: .normal)
gifFooter.setStatusText("gifFooter...1", for: .readyLoad)
gifFooter.setStatusText("gifFooter...2", for: .loading)
gifFooter.refreshStatusLabel?.textColor = UIColor.cyan
...
/// 添加使用
scrollView.footerView = gifFooter
gif显示效果
Use-DIY(自定义使用)
- header
- 继承于JTRefreshHeader
- 推荐采用layout自动布局或者autoresizingMask布局 (控制器使用自定义控件时不需要传入视图frame)
- 改变视图高度,只要设置属性refresh_height就ok了。
- 在以下方法中设置你的DIY视图动画,执行方法等。。。
/// *正常状态(下拉中),progress为下拉进度
override func headerDroping(_ progrss: CGFloat)
/// *即将刷新
override func headerReadyRefresh()
/// *开始刷新,刷新中 (刷新中,不会从复调用该方法)
override func headerRefreshing()
/// *结束刷新
override func headerStopRefresh()
- footer
- 继承于JTRefreshFooter
- 推荐采用layout自动布局或者autoresizingMask布局 (控制器使用自定义控件时不需要传入控件frame)
- 改变视图高度,只要设置属性refresh_height就ok了
- 在以下方法中设置你的DIY视图动画,执行方法等。。。
/// *正常状态(上拉中), progrss为上拉进度
override func footerPulling(_ progrss: CGFloat)
/// *准备加载状态(释放开启加载)
override func footerReadyLoad()
/// *开始,加载中 (不会从复调用该方法)
override func footerLoading()
/// *结束加载
override func footerStopLoad()
DIY显示效果
Note(使用注意)
- 在DIY时,在子类中复写observeValue change方法时,记得执行父类的super.observeValue方法。
- 在pod install后,如果出现语言版本错误, 选择Pods项目中的JTRefresh Target中的Build Settings设置Swift Language Version为4.0以上~
- 在使用提供的JTRefreshHeaderView,JTRefreshFooterView,JTRefreshGIFHeaderView, JTRefreshGIFFooterView初始化过程中,使用Closures(闭包,blocks)初始化时,如果在闭包中使用自己,或者调用该视图父类的JTRefreshProtocol方法时,请使用弱引用(具体看例子)
- 在UICollectionView添加header或者footer时,请设置collectionView.alwaysBounceVertical = true,或collectionView.alwaysBounceHorizontal=true, 因为这个默认是关闭的,当视图内容小于高度时,滑不动喔(collectionView上拉还有点问题,有时间我再看看~)
- 在iOS 11中tableView上拉刷新后插入row或者更新tableView会闪屏,设置estimatedRowHeight=0,内部已经设置,不需要再设置。