2017-12-12 7 views
0

RxSwiftとMVVMパターンを使用する場合、UIButtonのタップジェスチャーをUITableViewCellに処理する最良の方法は何ですか?私はそれをviewModelの変数にバインドする必要がありますか?UITableViewCellでUITableViewCellのUIButtonタップジェスチャーをviewModelで観測可能にする

+0

ボタンは、私は4を仮定しているので?クラスをviewControllerから離れた場所に配置するには、viewControllerでNotificationCenter.default.addObserverを使用し、セルクラス内でボタンをクリックすると呼び出されるNotificationCenter.default.postを使用することをお勧めします。 – Vollan

答えて

1

あなたのセルで観測可能なタップを提供し、それをvcからバインドすることができます。

VCで次に
class SomeCell: UITableViewCell { 

    @IBOutlet var detailsButton : UIButton! 


    var detailsTap : Observable<Void>{ 

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

    } 
} 

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) 

} 
関連する問題