An easy way to use pull to refresh and infinite scrolling in Swift

ESPullToRefresh

An easy way to use pull to refresh and infinite scrolling in Swift. Pod 'ESPullToRefresh'

ESPullToRefresh is an easy-to-use component that give pull-to-refresh and infinite-scrolling implemention for developers. By extension to UIScrollView, you can easily add pull-to-refresh and infinite-scrolling for any subclass of UIScrollView. If you want to customize its UI style, you just need conform the specified protocol.

Requirements

  • Xcode 8 or later
  • iOS 8.0 or later
  • ARC
  • Swift 2.3 or later

Features

  • Support UIScrollView and its subclasses UICollectionView UITableView UITextView
  • Pull-Down to refresh and Pull-Up to load more
  • Support customize your own style(s)

Demo

Download and run the ESPullToRefreshExample project in Xcode to see ESPullToRefresh in action.

Installation

CocoaPods

pod "ESPullToRefresh"

Carthage

github "eggswift/pull-to-refresh"

Manually

git clone https://github.com/eggswift/pull-to-refresh.git
open ESPullToRefresh

Usage

Default style:

Add ESPullToRefresh to your project

import ESPullToRefresh

Add default pull-to-refresh

self.tableView.es_addPullToRefresh {
	[unowned self] in
	/// Do anything you want...
	/// ...
	/// Stop refresh when your job finished, it will reset refresh footer if completion is true
	self.tableView.es_stopPullToRefresh(completion: true)
	/// Set ignore footer or not
	self.tableView.es_stopPullToRefresh(completion: true, ignoreFooter: false)
}

Add default infinite-scrolling

self.tableView.es_addInfiniteScrolling {
	[unowned self] in
	/// Do anything you want...
	/// ...
	/// If common end
	self.tableView.es_stopLoadingMore()
	/// If no more data
	self.tableView.es_noticeNoMoreData()
}

Customize Style

As effect:

PS: Load effect is from MeiTuan iOS app.

Customize refresh need conform the ESRefreshProtocol and ESRefreshAnimatorProtocol protocol.

Add customize pull-to-refresh

func es_addPullToRefresh(animator animator: protocol<ESRefreshProtocol, ESRefreshAnimatorProtocol>, handler: ESRefreshHandler)

Add customize infinite-scrolling

func es_addInfiniteScrolling(animator animator: protocol<ESRefreshProtocol, ESRefreshAnimatorProtocol>, handler: ESRefreshHandler)

Espried and auto refresh

ESPullToRefresh support for the latest expiration time and the cache refresh time, You need set an refreshIdentifier to your UIScrollView.

scrollView.refreshIdentifier = "Your Identifier" // Set refresh identifier
scrollView.expriedTimeInterval = 20.0 // Set the expiration interval

You can use es_autoPullToRefresh() method, when the time over the last refresh interval expires automatically refreshed.

scrollView.es_autoPullToRefresh()

let expried = scrollView.espried // expired or not

Remove

func es_removeRefreshHeader()
func es_removeRefreshFooter()

GitHub