https://github.com/ReactiveX/RxSwift/tree/master/RxExample/RxDataSources
RxDataSources:
https://github.com/RxSwiftCommunity/RxDataSources
Podfileに記載するなりしてインストールしてください。
SectionありのdataSourceを生成する
RxTableViewSectionedReloadDataSourceを使用します。SectionModelでSectionに表示するelementを指定します。
- let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, String>>()
- let items = Observable.just([
- SectionModel(model: "First section", items: [
- "aaaa",
- "bbbb",
- ]),
- SectionModel(model: "Second section", items: [
- "cccc",
- "dddd",
- ])
- ])
セルの生成
以下のように、indexPathとelementが引数に入っているのでコールバック内でセルを生成する。
- dataSource.configureCell = { (_, tableView, indexPath, element) in
- let cell = tv.dequeueReusableCellWithIdentifier("Cell")!
- cell.textLabel?.text = "\(element) @ row \(indexPath.row)"
- return cell
- }
データとTablewViewをBindする
- items
- .bindTo(tableView.rx_itemsWithDataSource(dataSource))
- .addDisposableTo(disposeBag)
ヘッダーのカスタマイズ
UITableViewDelegateで処理する必要があります。以下のように、ヘッダー用のViewとHightを返すモジュールを実装します。
- func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
- let view = UITableViewHeaderFooterView()
- view.textLabel?.text = dataSource.sectionAtIndex(section).model ?? ""
- return view
- }
- func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
- return 44
- }