#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 }