SpotPullRefresh

一个易于使用的下拉刷新和上拉加载更多的组件。 本仓库学习自著名的下拉刷新组件 MJRefresh。

SwiftPackageManager Compatible

中文

特性

要求

哪些类型的控件可以使用它进行刷新?

UIScrollView 及其所有子类。

安装

Swift Package Manager

将依赖添加到你库的 Package.swift 文件中

dependencies: [
.package(url: "https://github.com/shawnclovie/SpotPullRefresh", .branch("master")),
]

或者从菜单 "File - Swift Package - Add Package Dependency..." 中使用 URL 和分支添加。

Carthage

将依赖添加到你的 Cartfile 文件中

github "shawnclovie/SpotPullRefresh" "master"

如何使用

请查看 SpotPullRefreshDemo/ViewController.swift 中的代码以获取可运行的示例。

控件类型

// Superclass of all other view
PullBaseView
// Superclass of pull down refresh view
class PullRefreshView: PullBaseView

// View with state label and last updated time label
class PullRefreshStateView: PullRefreshView

// View with arrowView and indicator (show on loading, left of state label) 
class PullRefreshIndicationStateView: PullRefreshStateView

// View with imageView to present animation (show on loading)
class PullRefreshAnimationStateView: PullRefreshStateView

在你的 viewDidLoad() 中

let refresher = PullRefreshIndicationStateView { [weak self] in
	// do something like make URLRequest on sub thread
	...
	// after finished, notify refresher
	DispatchQueue.main.async {
		guard let self = self else {return}
		self.scrollView.spot_pullDownRefreshView?.endRefreshing()
	}
}
// do something to config refresher, e.g.
// setup arrowView, set image or add subviews (center to .zero)
// set stateTitleRenderer and lastUpdatedTimeTextRenderer of refresher for localization.
// refresher.lastUpdatedTimeLabelEnabled = true/false

scrollView.spot_pullDownRefreshView = refresher
// Superclass of pull up load view
class PullLoadView: PullBaseView

// View with state label
class PullLoadStateView: PullLoadView

// View with indicator (show on loading, left of state label) 
class PullLoadIndicationStateView: PullLoadStateView

// View with imageView to present animation (show on loading)
class PullLoadAnimationStateView: PullLoadStateView

在你的 viewDidLoad() 中,做几乎相同的事情来创建下拉视图

let moreDataLoader = PullLoadIndicationStateView { [weak self] in
	// do something like make URLRequest on sub thread
	...
	// after finished, notify moreDataLoader
	DispatchQueue.main.async {
		guard let self = self,
			let pullUp = self.tableView.spot_pullUpLoadView
			else {return}
		if /* did load all data and no more */ {
			pullUp.endRefreshingWithNoMoreData()
		} else {
			pullUp.endRefreshing()
		}
	}
}
// do something to config moreDataLoader, e.g.
// set moreDataLoader.stateTitleRenderer for localization.
scrollView.spot_pullUpLoadView = moreDataLoader

许可证

SpotPullRefresh 根据 MIT 许可证发布。