如何向我的 UITableViewCell 添加部分?

How can I add sections to my UITableViewCell?

如何使用 Bond 框架向我的 UITableViewCell 添加部分?

 self.viewModel.items.bind(to: self.tableView) { (item, indexPath, tableView) -> UITableViewCell in
                      let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: ListCell.self),
                                                               for: indexPath) as! ListCell
                       cell.item = item[indexPath.row]
                      return cell
                  }.dispose(in: self.bag)

关于源代码,

如果你只想覆盖一个标题,你应该覆盖这个 class 并为

实现相应的逻辑
open class TableViewBinderDataSource<Changeset: SectionedDataSourceChangeset>: NSObject, UITableViewDataSource

但是如果你想实现完全自定义的视图,这就复杂多了。我不认为这对这个图书馆来说是可能的。原因是你应该重写UITableViewDelegate,但是它用在public protocol ReactiveExtensions中不能被重写。

你必须写这个class

class  CustomSection<Changeset: SectionedDataSourceChangeset>: TableViewBinderDataSource<Changeset>, UITableViewDelegate where Changeset.Collection == Array2D <String, ListItemViewModel> {

        @objc func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
            return changeset?.collection[sectionAt: section].metadata
        }

并且在您 ViewController 的 viewDidload 中,您必须调用此函数。

private func setupViewModel() {  
        let sectionBindingDatSource: CustomSection = CustomSection<TreeChangeset>{ (changeset, indexPath, tableView) -> UITableViewCell in
            let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: ListCell.self), for: indexPath) as! ListCell
            cell.item = changeset.sections[indexPath.section].items[indexPath.row]

            return cell
        }
        self.viewModel.sections.bind(to: self.tableView, using: sectionBindingDatSource)
    }

如果您想覆盖 TableViewDataSourse 的功能并自定义部分,您必须设置委托

self.tableView.delegate = sectionBindingDatSource