RxDataSources - Как добавить пользовательскую пустую ячейку, когда нет данных

struct MyViewModel {
    var items: Observable<String>
    //....
}

// In view controller
viewModel.items.bind(to: tableView.rx.items(cellIdentifier: "Cell", cellType: MyCell.self)) { index, model, cell in
  //...
}
.disposed(by: disposeBag)

Если у меня есть другая ячейка с именем EmptyCell, и я хочу отобразить эту ячейку, если элементы пусты. Как я мог этого добиться.


person Binh Le    schedule 07.09.2017    source источник


Ответы (1)


Источник данных RxDataSources должен состоять из любого фрагмента состояния или данных, которые вы хотите отобразить в своих ячейках. По этой причине вам может потребоваться перечисление для вашего SectionItem, а не простая строка.

enum CellType {
    case empty
    case regular(String)
}

typealias Section = SectionModel<String, CellType>

Затем при связывании наблюдаемого объекта "CellType" вы можете относительно легко использовать configureCell Cell Factory, чтобы определить, какую ячейку вы хотите исключить из очереди для каждого случая.

e.g.

dataSource.configureCell = { _, _, _, cellType in
    switch cellType {
        case .empty: /// Dequeue empty cell
        case .regular(let string): // Dequeue regular cell and set string
    }
}
person Shai Mishali    schedule 07.09.2017