JTRefresh 0.0.8

JTRefresh 0.0.8

Maintained by jintao.



JTRefresh 0.0.8

  • By
  • jintao

JTRefresh

语言

Swift4.0

Install(安装)

pod 'JTRefresh'

适用视图

UIScrollView, UITableView, UICollectionView, UIWebView

Use(使用)

  1. 设置控件高度,设置控件或者适用视图(UIScrollView等)的headerView/footerView的refresh_height属性(上拉以及下拉都是这个属性)
  2. 结束刷新,调用适用视图(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显示效果

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显示效果

gif效果

Use-DIY(自定义使用)

  • header
  1. 继承于JTRefreshHeader
  2. 推荐采用layout自动布局或者autoresizingMask布局 (控制器使用自定义控件时不需要传入视图frame)
  3. 改变视图高度,只要设置属性refresh_height就ok了。
  4. 在以下方法中设置你的DIY视图动画,执行方法等。。。
/// *正常状态(下拉中),progress为下拉进度
override func headerDroping(_ progrss: CGFloat)
/// *即将刷新
override func headerReadyRefresh()
/// *开始刷新,刷新中 (刷新中,不会从复调用该方法)
override func headerRefreshing()
/// *结束刷新
override func headerStopRefresh()
  • footer
  1. 继承于JTRefreshFooter
  2. 推荐采用layout自动布局或者autoresizingMask布局 (控制器使用自定义控件时不需要传入控件frame)
  3. 改变视图高度,只要设置属性refresh_height就ok了
  4. 在以下方法中设置你的DIY视图动画,执行方法等。。。
/// *正常状态(上拉中), progrss为上拉进度
override func footerPulling(_ progrss: CGFloat)
/// *准备加载状态(释放开启加载)
override func footerReadyLoad()
/// *开始,加载中 (不会从复调用该方法)
override func footerLoading()
/// *结束加载
override func footerStopLoad()
DIY显示效果

diy效果

Note(使用注意)

  1. 在DIY时,在子类中复写observeValue change方法时,记得执行父类的super.observeValue方法。
  2. 在pod install后,如果出现语言版本错误, 选择Pods项目中的JTRefresh Target中的Build Settings设置Swift Language Version为4.0以上~
  3. 在使用提供的JTRefreshHeaderView,JTRefreshFooterView,JTRefreshGIFHeaderView, JTRefreshGIFFooterView初始化过程中,使用Closures(闭包,blocks)初始化时,如果在闭包中使用自己,或者调用该视图父类的JTRefreshProtocol方法时,请使用弱引用(具体看例子)
  4. 在UICollectionView添加header或者footer时,请设置collectionView.alwaysBounceVertical = true,或collectionView.alwaysBounceHorizontal=true, 因为这个默认是关闭的,当视图内容小于高度时,滑不动喔(collectionView上拉还有点问题,有时间我再看看~)
  5. 在iOS 11中tableView上拉刷新后插入row或者更新tableView会闪屏,设置estimatedRowHeight=0,内部已经设置,不需要再设置。