2017-01-13 12 views
1

Я реализую простой UITableView адресов с использованием RxSwift и MVVM. Я создал привязку в контроллере своего вида.RxSwift, MVVM - Не удается реализовать методы UITableViewDataSource с привязкой RxSwift

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. 

Я Googled и обнаружил, что я должен установить tableView.delegate и tableView.dataSource к нулю.

Однако, есть некоторые методы UITableViewDataSource, что мне еще нужно, как

canEditRowAtIndexPath 
commitEditingStyle 

для удаления адресов.

Как это реализовать? Заранее спасибо.

ответ

0

Хорошо, я нашел решение.

Использование RxDataSources.

https://github.com/RxSwiftCommunity/RxDataSources

Я действительно не хочу, чтобы использовать новую капсулу для этого, но я не мог найти альтернативное решение.

Хорошо, я нашел альтернативное решение сейчас!

Использование

tableView.rx_itemDeleted 

Эта функция обертка ReactSwift для commitEditingStyle (вводит в заблуждение да!), Что вы написали бы в commitEditingStyle теперь вы можете написать в этой функции. Для 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

Точно, я не мог найти альтернативное решение самостоятельно. Спасибо чувак! –