2017-12-18 14 views
0

で初期化のUITableViewをリロード私は観測の配列を使用移入され、いくつかのトドスとメインUITableView持っている:私は/編集データを追加し、保存」をクリックすることができ、別の画面でRxSwift - 自動観測

// on viewDidLoad 
self.todosViewModel.todos.asObservable() 
    .bind(to: tableView.rx.items(cellIdentifier: "TodoViewCell", cellType: TodoTableViewCell.self)) { (row, todo, cell) in 
     cell.status.image = todo.getStatusImage() 
     cell.title.text = todo.title.value 
     cell.todoDescription.text = todo.description.value 
     cell.dueDate.text = String(describing: Utilities.dateFormatter.string(from: todo.dueDate.value)) 
}.disposed(by: disposeBag) 

を"ボタンを押して新しいToDoを追加するか、編集中のToDoを修正します。これは、tableViewが自動的にリロードされないようにして、他の画面が閉じられたときにトリガーされるをviewDidAppearに呼び出さなければならないことを除いて、素晴らしいことです。

ので、

はその後todosViewModel変数は更新されたとき、私は自動的にテーブルをリロードするためのネイティブ方法はありますか?

EDIT:

私が同じ値を持つtodosViewModelvalueプロパティを再度関連付けるTODOの版の画面上の場合は、それも動作します:

self.todosViewModel.todos.value = self.todosViewModel.todos.value 

かなり醜いですが、私は、これらの方法の1つを使ってtableViewをリロードする方法しか知りません。

+0

アイテムを保存または編集するときに 'todos'が何らかのイベントを出すのですか? –

+0

直接ではありません。新しい 'todo'を' '追加するか、新しい値を' todos'ベースに再結合すると、それは動作します。私が編集するとき、いいえ。私は 'UITableView'を塗り潰すモデルにイベントをどのように送るべきか分かりません。 – juniorgarcia

答えて

0

新しいToDoを追加したり、新しいToDo値をベースToDosに再関連付けしたりすると機能します。私が編集するとき、いいえ。

これはすべての点です。 UITableViewを更新するには、内部のアイテムが編集されたとき、またはtodoのものをセル内にバインドする必要があるときにtodosを放出する必要があります(この方法で、セルの高さを変更することはできませんが、 )。

もう1つのオプションは、観測可能なものの一部をtodoから、提示されたセルのインデックスにマップし、UITableView.reloadRowsを呼び出して、編集したセルを更新することです。

RxDataSources examplesをご覧ください。

+0

私が行っているように警告やパフォーマンスの問題がなければ、私はそれに耐えることができます。私の場合、RxDataSourceは過剰ですが、とにかく見ています。 – juniorgarcia