У меня есть табличное представление с RxDataSources, на котором элементы ячеек получили значок удаления. когда ячейки удаляются из очереди и щелкают этот значок удаления, запускаются все предыдущие события щелчка, таким образом дублируя нажатие. Ячейка товара:
removeImageView.rx.tap().map { _ in indexPath }
.bind(to: viewModel.onRemoveItem).disposed(by: cellDisposeBag)
Модель просмотра ячеек:
let onRemoveItem = PublishSubject<IndexPath>()
Представьте модель представления контроллера, в которой привязаны ячейка и ViewModel:
let vm = ItemViewModel(with: item)
vm.onRemoveItem.bind(to: self.onRemoveItem).disposed(by: self.rx.disposeBag)
return SectionItem.item(viewModel: vm)
Просмотр контроллера:
let dataSource = RxTableViewSectionedReloadDataSource<SectionItem>(configureCell: { dataSource, tableView, indexPath, item in
switch item {
case .item(let viewModel):
let cell = (tableView.dequeueReusableCell(withIdentifier: itemtIdentifier, for: indexPath) as? ItemCell)!
cell.bind(to: viewModel, at: indexPath)
return cell
}
}, titleForHeaderInSection: { dataSource, index in
let section = dataSource[index]
return section.title
} )
output?.items
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: rx.disposeBag)
output?.onRemoveCartIemTapped.distinctUntilChanged()
.skip(1)
.distinctUntilChanged().drive(onNext: { [weak self] (indexPath) in
print("onRemoveCartIemTapped" + String(indexPath.item))
}).disposed(by: rx.disposeBag)
Консольная отладка:
onRemoveCartIemTapped0
onRemoveCartIemTapped3
onRemoveCartIemTapped1
onRemoveCartIemTapped4
cellDisposeBag
вprepareForReuse
методе ячейки? Если ячейки повторно используются без удаления подписок, это может вызвать такое поведение. - person Paul   schedule 02.01.2019