2017-03-03 8 views
0

Observableデータシーケンスをテーブルにバインドすることができます。 ここで、クリックすると、そのセルのラベルを新しい値に変更するボタンが各セルにあります。これを行う方法 ?Rxswiftテーブルビューのセルの値を更新する

私はこれまでのところ、私はその後、私は

label.text = "new text" 

をやっているセルのポインティングクラスに

をそのボタンの@IBActionを作成しましたが、私はその後、スクロールを下にスクロールするとき

を次のように行っている

新しい値ではなく、以前の値を表示する

以前は配列を使用し、各値を更新に使用したセルに設定するその配列項目にはtableview.reloadDataが呼び出されます。

どうすればRxSwiftでこれを行うことができますか?

私はこれまで

tableview.dataSource = nil (then) 
myData.bindTo ... (bind again) 

これが正しい道に私には思えないので、行っています。だからこれに対処する適切な方法は何ですか?

答えて

0

私はRxSwiftCommunityアクションこれは正しい方法であれば前にわからないような

https://github.com/RxSwiftCommunity/Action

のViewController

variable.asObservable().bindTo(mytable.rx.items(cellIdentifier: "cell")) { (row, person, cell) in 
      if let cellToUse = cell as? TableViewCell { 
       cellToUse.person = Variable(person) 
       cellToUse.button1.rx.action = cellToUse.action 
      } 
      }.addDisposableTo(disposeBag) 

と、細胞内

class TableViewCell: UITableViewCell { 

    @IBOutlet weak var label1: UILabel! 
    @IBOutlet weak var label2: UILabel! 
    @IBOutlet weak var button1: UIButton! 

    let disposeBag = DisposeBag() 
    let action = CocoaAction { input in 
     return .just(input) 
    } 

    var person : Variable<Person>!{ 
     didSet { 
      self.updateUI() 
     } 
    } 

    private func updateUI(){ 
     person.asObservable() 
      .subscribe(onNext: { 
       person in 
       let name : Observable<String> = Observable.of(person.name) 
       let age : Observable<String> = Observable.of("\(person.age)") 
       _ = name.bindTo(self.label1.rx.text) 
       _ = age.bindTo(self.label2.rx.text) 
      }).addDisposableTo(disposeBag) 

     action.elements 
      .asObservable() 
      .subscribe(onNext: { 
       _ in 
       self.label2.text = "asd" 

      }).addDisposableTo(disposeBag) 
    } 
} 

でこれをachiveすることができていますそれは私のために働いた

私に道を示すために(https://rxswift.slack.com/messages/@fpillet)ありがとうございました

関連する問題