一个易于使用的下拉刷新和上拉加载更多的组件。 本仓库学习自著名的下拉刷新组件 MJRefresh。
UIScrollView 及其所有子类。
将依赖添加到你库的 Package.swift 文件中
dependencies: [
.package(url: "https://github.com/shawnclovie/SpotPullRefresh", .branch("master")),
]
或者从菜单 "File - Swift Package - Add Package Dependency..." 中使用 URL 和分支添加。
将依赖添加到你的 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 许可证发布。