SRISTableView (SRInfiniteScrollingTableView)
SRISTableView 是一个帮助开发者实现无限滚动的 UITableViews
的库,类似于 Facebook 或 Twitter 的新闻源。
安装
手动方式
只需在工作计算机上克隆此项目,然后在您的项目中将 Source/SRISTableView
目录下的文件添加进去即可。
CocoaPods
只需在 Podfile 中添加这一行:pod 'SRISTableView'
如何使用
假设您已经有一个包含 UITableView
的 UIViewController
,并且想要使此表格视图无限滚动。
final class TestViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
}
您只需要三件事(实际上,只需要两件事)
委托类型 (SRISDelegate
)
一个遵循 SRISDelegate
的自定义类型,充当您表格视图的委托。这个委托将处理以下事项
- 声明一个泛型
ContentType
- 填充请求数据(
className
、filterParameters
、sorting
、recordsPerRequest
...) - 对结果数据进行排序
- 处理缓存
- 设计不同的预期单元格(
resultCell
、failedCell
、noResultCell
...) - 基本的表格视图委托方法和属性(
didSelect()
、tableRowHeight
...)
请求类型 (SRISRequest
)
另一个遵循 SRISRequest
的自定义类型,其中您定义您的API调用和预期的完成。如果需要,您还可以声明一个处理缓存的调用。
管理器 (SRISManager
)
将混合一个 SRISDelegate
和一个 SRISRequest
的对象,并将其链接到您的表格视图。
示例
假设我们想创建一个新闻源,使用一个虚构API中的数据。一个简单的表格视图,不使用任何缓存数据。我们只想显示简单的 String
对象。
请求类型
func load<Delegate>(delegate: Delegate, skipping: Int, cachingData: Bool, _ completion: @escaping ([String]?, Error?) -> ()) where Delegate : SRISDelegate {
var query = TestQuery(clasName: delegate.className) // The class name, for example "NewsFeed"
delegate.filterParameters.forEach { key, value in
query.whereKey(key, equalTo: value)
}
query.limit = delegate.recordsPerRequest // The limit of results per request
query.skipping = skipping // The number of results to skip
// Fetching data
query.fetchData { (result, error) in
completion(result, error)
}
}
委托
struct NewsFeedDelegate: SRISDelegate {
typealias ContentType = String
var className: String {
return "NewsFeed" // The data class name
}
var recordsPerRequest: Int {
return 10 // The amount of results to load per request
}
func displayedResults(fromUnorderedResults unorderedResults: [String]) -> [String] {
return unorderedResults.sorted() // How to sorted the data to be displayed
}
var shouldCacheData: Bool {
return false
}
func resultCell(forTableView tableView: UITableView, andObject object: String, atIndexPath indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "newsFeedCell", for: indexPath)
cell.textLabel?.text = object
return cell
}
func didSelect(object: String) {
// Equivalent of didSelectRow(atIndexPath)
}
var shouldShowFailedCell: Bool {
return false
}
}
管理器
final class TestViewController: UIViewController {
var manager: SRISManager<NewsFeedDelegate, NewsFeedRequest>?
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.manager = SRISManager.setupAndStart(inTableView: self.tableView,
withLoadMoreOnScrollDelegate: NewsFeedDelegate(),
andRequestType: NewsFeedRequest())
}
}
然后...瞧!
许可证
SRISTableView 在 MIT 许可证下发布。请参阅 LICENSE 获取详细信息。