2016-08-22 20 views
9

Tek tablo görünümünde birden çok özel hücre kullanabileceğim için RxSwift için herhangi bir kod örneği olduğunu merak ediyorum. Yani örneğin iki bölüm var ve ilk bölüm CellWithImage tip tanımlayıcı ile 10 hücreye sahip ve ikinci bölüm CellWithVideo tip tanımlayıcı ile 10 hücresine sahip.RxSwift tablo görünümü

ben RxSwiftDataSources kullanarak başardınız

cevap

3

herhangi bir yardım için örneğin yalnızca bir hücre tipini kullanan RxSwiftTableViewExample

Teşekkür kurdu ettik tüm tuts ve kod örnekleri,

o izin Çok bölümlü özel hücreleri kullanmanız.

+4

Bu kodu nasıl uygulayacağınızı nasıl paylaşabilirsiniz? – nburk

2

Herhangi biri ilgilenirse, işte benim uygulamam. Oyunların bir listesini içeren bir uygulamam var. Oyun bittiyse ya da hala devam ederse, farklı hücreler kullanıyorum. İşte benim kod: ViewModel olarak

, bitirdim/Devam eden olanları bölün oyunun bir listesi var ve benim tableview benim bölümleri bağlayan viewController içinde Sonra 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) 

onları map ve bunun gibi farklı hücreleri kullanın. Durum yerine doğru hücreyi almak için indexPath kullanabileceğimi unutmayın.

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