2017-01-13 9 views
1

RxSwiftとMVVMを使用して簡単なUITableViewのアドレスを実装しています。私はこのようなビューコントローラでバインディングを作成しました。RxSwift、MVVM - RxSwiftバインディングでUITableViewDataSourceメソッドを実装できません。

viewModel.addressList.asDriver() 
    .drive(tableView.rx_itemsWithCellIdentifier(reusableIdentifier, cellType: SavedAddressTableViewCell.self)) { [weak self] (row, viewModel, cell) in 
     self?.setUpAddressCell(cell, row: (row + 1)) 
    } 
    .addDisposableTo(disposeBag) 

ただし、アプリケーションでページを開こうとするとこのエラーが発生します。

Maybe delegate was already set in `xib` or `storyboard` and now it's being overwritten in code. 

Google検索では、tableView.delegateとtableView.dataSourceをnilに設定する必要があることがわかりました。

しかし、私はまだ削除アドレス用

canEditRowAtIndexPath 
commitEditingStyle 

のように、必要があるいくつかのUITableViewDataSourceの方法があります。

どうすれば実装できますか?前もって感謝します。このライン上の

答えて

0

オーケー、私は解決策を見つけました。

RxDataSourcesを使用します。

https://github.com/RxSwiftCommunity/RxDataSources

私は本当にこのために新しいポッドを使用したくありませんでしたが、私は別の解決策を見つけることができませんでした。

これで代替ソリューションが見つかりました。

使用

tableView.rx_itemDeleted 

この機能は、あなたが今、この機能に書くことができますcommitEditingStyleで書かれていたものは何でも(はい誤解を招く!)commitEditingStyleためReactSwiftのラッパー、です。 canEditRowAtIndexPathの場合、私は常にtrueを返したかったのですが、これはコードを記述しなくてもデフォルトの戻り値なので、canEditRowAtIndexPathを実装する必要はありませんでした。

1

ライト:

tableView.dataSource = nil 
+0

ああ、それは動作しません。あなたはあなたの細胞を移植しますが、あなたが上で述べたアニメーション削除機能を実装するのに役立たないでしょう。 –

+0

次に、[RxDataSources](https://github.com/RxSwiftCommunity/RxDataSources)を使用するか、この[rx-example](https://github.com/ReactiveX/RxSwift/blob/master/RxExample)をチェックします。 /RxExample/Examples/TableViewWithEditingCommands/TableViewWithEditingCommandsViewController.swift) – XFreire

+0

正確には、自分で代替ソリューションを見つけることができませんでした。ありがとう! –

関連する問題