2017-12-12 3 views
0

Was ist der beste Weg, tippen Geste von UIButton in UITableViewCell bei der Arbeit mit RxSwift und MVVM Muster zu behandeln? Sollte ich es an eine Variable in viewModel binden?Binding UIButton tippen Gesten in UITableViewCell zu beobachtbar in viewModel

+0

Da die Taste i 4 annehmen? Klassen außerhalb des ViewControllers, würde ich vorschlagen NotificationCenter.default.addObserver in der ViewController und NotificationCenter.default.post, die bei einem Klick innerhalb der Zelle Klasse aufgerufen werden. – Vollan

Antwort

1

Sie könnten eine in Ihrer Zelle beobachtbare Anzapfung bereitstellen und sie von der VC binden.

class SomeCell: UITableViewCell { 

    @IBOutlet var detailsButton : UIButton! 


    var detailsTap : Observable<Void>{ 

     return self.detailsButton.rx.tap.asObservable() 

    } 
} 

Dann in der vc:

private func bindTable(){ 
    //Bind the table elements 
    elements.bind(to: self.table.rx.items) { [unowned self] (table, row, someModel) in 
     let cell = cellProvider.cell(for: table, at: row) //Dequeue the cell here (do it your own way) 

     //Subscribe to the tap using the proper disposeBag 
     cell.detailsTap 
      .subscribe(onNext:{ print("cell details button tapped")}) 
      .disposed(by: cell.disposeBag) //Notice it's using the cell's disposableBag and not self.disposeBag 

     return cell 
    } 
     .disposed(by: disposeBag) 

    //Regular cell selection  
    self.table.rx 
      .modelSelected(SomeModel.self) 
      .subscribe(onNext:{ model in print("model")}) 
      .disposed(by: self.disposeBag) 

} 
Verwandte Themen