Latest 0.0.8
Homepage https://github.com/Jintao1997/JTRefresh
License MIT
Platforms ios 8.0, requires ARC
Frameworks UIKit
Authors

语言

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,内部已经设置,不需要再设置。

Latest podspec

{
    "name": "JTRefresh",
    "version": "0.0.8",
    "summary": "A iOS Refresher of JTRefresh",
    "homepage": "https://github.com/Jintao1997/JTRefresh",
    "license": {
        "type": "MIT"
    },
    "authors": {
        "jintao": "[email protected]"
    },
    "source": {
        "git": "https://github.com/Jintao1997/JTRefresh.git",
        "tag": "0.0.8"
    },
    "platforms": {
        "ios": "8.0"
    },
    "source_files": "JTRefresh/*.swift",
    "resources": "JTRefresh/JTRefresh.bundle",
    "frameworks": "UIKit",
    "requires_arc": true
}

Pin It on Pinterest

Share This