RxSwift TableView с действиями салфетки

#ios #swift #uitableview #rx-swift #rxdatasources

#iOS #swift #uitableview #rx-swift #rxdatasources

Вопрос:

Я использую платформу RxSwift with RxDataSources для настройки tableview:

 let dataSource = RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<String, String>>(configureCell: { _, tableView, indexPath, item -> UITableViewCell in
       let cell = tableView.dequeueReusableCellwithIdentifier: "TestCell", for: indexPath)
       cell.configure()
       return cell
})

vm.cellViewModels
     .map({ [AnimatableSectionModel(model: "", items: $0)] })
     .bind(to: _view.tableView.rx.items(dataSource: dataSource))
     .disposed(by: bag)
  

Я пытаюсь заставить мой UISwipeActionsConfiguration работать в UITableViewDelegate и установить делегат как:

tableView.rx.setDelegate(self).disposed(by: bag)

В то же время, устанавливая методы делегирования как:

 extension UIViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        let action = UIContextualAction(style: .normal, title: nil) { action, view, completion in
            
        }

        action.image = Images.shared.logo.resized(to: CGSize(width: 24, height: 24)).tintWithColor(.darkGray).withRenderingMode(.alwaysOriginal)
        action.backgroundColor = .clear

        let configuration = UISwipeActionsConfiguration(actions: [action])
        configuration.performsFirstActionWithFullSwipe = false

        return configuration
    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: 20))
        headerView.backgroundColor = UIColor.red
        return headerView
    }
}
  

Заголовок вызывается и работает должным образом, что означает, что делегат должен быть установлен правильно.


Выполнение этого без RxSwift работает для действий салфетки.

Кто-нибудь знает, как заставить trailingSwipeActionsConfigurationForRowAt работать с RxDataSources, поскольку я могу только заставить viewForHeaderInSection работать?

Комментарии:

1. Я нашел проблему. Добавив этот метод, исправлены действия салфетки: dataSource.canEditRowAtIndexPath = { datasource, index -> Bool in return true }