swift2 具有多种自定义单元格类型的RxSwift表视图

new9mtju  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(181)

当我可以在一个表视图中使用多个自定义单元格时,我想知道是否有RxSwift代码示例例如,我有两个部分,第一个部分有10个标识符类型为CellWithImage单元格,第二个部分有10个标识符类型为CellWithVideo单元格
我发现的所有tuts和代码示例都只使用一种单元格类型,例如RxSwiftTableViewExample
谢谢你的帮助

mbjcgjjk

mbjcgjjk1#

您可以设置多个自定义单元格而不需要RxDatasource。

//Register Cells as you want
    tableView.register(CustomRxTableViewCell.self, forCellReuseIdentifier: "Cell")
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "BasicCell")

    ViewModel.data.bind(to: tableView.rx.items){(tv, row, item) -> UITableViewCell in

        if row == 0 {
            let cell = tv.dequeueReusableCell(withIdentifier: "BasicCell", for: IndexPath.init(row: row, section: 0))

            cell.textLabel?.text = item.birthday
            return cell
        }else{
            let cell = tv.dequeueReusableCell(withIdentifier: "Cell", for: IndexPath.init(row: row, section: 0)) as! CustomRxTableViewCell
            cell.titleLb.text = item.name
            return cell
        }

    }.disposed(by: disposeBag)
ffscu2ro

ffscu2ro2#

我已经使用RxSwiftDataSources对其进行了管理,
它允许您使用具有多个部分自定义单元格。I've used this code for help

ubby3x7f

ubby3x7f3#

如果有人感兴趣的话,这里是我的实现。我有一个应用程序,里面有一个游戏列表。根据游戏是结束了还是还在进行,我使用不同的单元格。下面是我的代码:
在ViewModel中,我有一个游戏列表,将它们分成已完成/正在进行的游戏,并将它们Map到SectionModel

let gameSections = PublishSubject<[SectionModel<String, Game>]>()
let dataSource = RxTableViewSectionedReloadDataSource<SectionModel<String, Game>>()

...

self.games.asObservable().map {[weak self] (games: [Game]) -> [SectionModel<String, Game>] in
    guard let safeSelf = self else {return []}
    safeSelf.ongoingGames = games.filter({$0.status != .finished})
    safeSelf.finishedGames = games.filter({$0.status == .finished})

    return [SectionModel(model: "Ongoing", items: safeSelf.ongoingGames), SectionModel(model: "Finished", items: safeSelf.finishedGames)]
}.bindTo(gameSections).addDisposableTo(bag)

然后在ViewController中,我将我的section绑定到我的tableview,并使用不同的单元格,就像这样。注意,我可以使用indexPath来获取正确的单元格,而不是状态。

vm.gameSections.asObservable().bindTo(tableView.rx.items(dataSource: vm.dataSource)).addDisposableTo(bag)
vm.dataSource.configureCell = {[weak self] (datasource, tableview, indexpath, item) -> UITableViewCell in
    if item.status == .finished {
        let cell = tableview.dequeueReusableCell(withIdentifier: "FinishedGameCell", for: indexpath) as! FinishedGameCell
        cell.nameLabel.text = item.opponent.shortName
        return cell
    } else {
        let cell = tableview.dequeueReusableCell(withIdentifier: "OnGoingGameCell", for: indexpath) as! OnGoingGameCell
        cell.titleLabel.text = item.opponent.shortName
        return cell
    }
}

相关问题