https://github.com/cythb/rxinfinitable
轻量加载更多控件。很容易与RxSwift一起使用。
https://github.com/cythb/rxinfinitable
infinite load-more uitableview
Last synced: 3 months ago
JSON representation
轻量加载更多控件。很容易与RxSwift一起使用。
- Host: GitHub
- URL: https://github.com/cythb/rxinfinitable
- Owner: cythb
- Created: 2021-03-03T14:21:28.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2021-03-04T12:51:05.000Z (over 5 years ago)
- Last Synced: 2025-07-17T22:17:18.448Z (11 months ago)
- Topics: infinite, load-more, uitableview
- Language: Swift
- Homepage:
- Size: 1.97 MB
- Stars: 4
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# RxInfinitable
这个小工程简单实现了下拉刷新数据,上拉加载更多功能。针对上拉加载更多,由于UIKit没有提供类似`UIRefreshControl`的控件,所以我简单的封装了`InfinitableView`。

## 如何使用
有四个步骤:
1. 添加视图
```swift
tableView.refreshControl = refreshControl
infinitableView.attach(to: self.tableView)
```
2. 下拉刷新的请求
```swift
let refreshActivity = ActivityIndicator()
self.refreshing = refreshActivity.asDriver()
let r0 = refreshControl.rx.controlEvent(.valueChanged).asObservable().map { () }
let r1 = r0.startWith(() ).flatMapLatest { [weak self](_) -> Observable<[Int]> in
let error = NSError(domain: "self.notExsist", code: -1, userInfo: nil)
guard let self = self else { return .error(error) }
return self.refresh().trackActivity(refreshActivity)
}
```
3. 上拉加载更多的请求
```swift
let loadActivity = ActivityIndicator()
self.loading = loadActivity.asDriver()
let r2 = infinitableView.rx.didTriggerLoading.flatMapLatest { [weak self] (_) -> Observable<[Int]> in
let error = NSError(domain: "self.notExsist", code: -1, userInfo: nil)
guard let self = self else { return .error(error) }
return self.loadMore().trackActivity(loadActivity)
}.flatMapLatest { [weak self] (list) -> Signal<[Int]> in
guard let self = self else { return .empty() }
self.datasource.append(contentsOf: list)
return .just(self.datasource)
}
```
4. 设置请求的互斥状态。即在刷新时不能再加载更多,反之亦然。
```swift
Driver.combineLatest(self.refreshing, self.loading).drive(onNext: { [weak self] (arg0) in
guard let self = self else { return }
let (refreshing, loading) = arg0
self.infinitableView.isEnabled = !refreshing
if !loading {
self.tableView.refreshControl = self.refreshControl
} else {
self.tableView.refreshControl = nil
}
}).disposed(by: bag)
```
## 最后重要的事情
如果你有任何建议或者问题,请去提issue。我很乐意能继续完善它。