Tampilan tabel RxSwift dengan beberapa tipe sel khusus

Saya ingin tahu apakah ada contoh kode untuk RxSwift ketika saya dapat menggunakan beberapa sel khusus dalam satu tampilan tabel. Jadi misalnya saya memiliki dua bagian dan bagian pertama memiliki 10 sel dengan pengidentifikasi tipe CellWithImage dan bagian kedua memiliki 10 sel dengan pengidentifikasi tipe CellWithVideo.

Semua tuts dan contoh kode yang saya temukan hanya menggunakan satu jenis sel, misalnya RxSwiftTableViewContoh

Terima kasih atas bantuannya


person edzio27    schedule 22.08.2016    source sumber


Jawaban (3)


Anda dapat mengatur beberapa sel khusus tanpa 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)
person Hanryang    schedule 27.05.2019

Saya telah mengelolanya menggunakan RxSwiftDataSources,

itu memungkinkan Anda untuk menggunakan sel khusus dengan banyak bagian. Saya telah menggunakan kode ini untuk bantuan

person edzio27    schedule 24.08.2016
comment
dapatkah Anda membagikan kode bagaimana Anda menerapkan ini? - person nburk; 22.11.2016
comment
Apakah itu ? kita tidak dapat menambahkan fungsi tabel lain secara langsung dengan RxSwift? - person Jatin Garg; 07.07.2021

Jika ada yang tertarik, inilah implementasi saya. Saya memiliki aplikasi dengan daftar permainan. Tergantung apakah permainan sudah selesai atau masih berjalan saya menggunakan sel yang berbeda. Ini kode saya:

Di ViewModel, saya memiliki daftar permainan, membaginya menjadi yang sudah selesai/berkelanjutan dan memetakannya ke 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)

Kemudian di ViewController, saya mengikat bagian saya ke tampilan tabel, dan menggunakan sel yang berbeda seperti ini. Perhatikan bahwa saya bisa menggunakan indexPath untuk mendapatkan sel yang tepat alih-alih status.

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
    }
}
person streem    schedule 09.01.2017
comment
Bagaimana cara memperbarui item di sumber data? dataSource.sectionModels hanya dapat diperoleh. Model saya adalah array dan saya mencoba memperbarui salah satu item setelah beberapa masukan pengguna. Terima kasih - person MikeG; 02.10.2018