首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用RxDataSources避免重复点击Tableview上的按钮

如何使用RxDataSources避免重复点击Tableview上的按钮
EN

Stack Overflow用户
提问于 2019-01-02 13:21:43
回答 1查看 1.3K关注 0票数 2

我有一个带有RxDataSources的表视图,其中单元格项有一个删除图标。当单元格脱离队列并单击该删除图标时,所有以前的单击事件都会被触发,从而重复点击。项目单元格:

代码语言:javascript
复制
 removeImageView.rx.tap().map { _ in indexPath } 
            .bind(to: viewModel.onRemoveItem).disposed(by: cellDisposeBag)

单元格视图模型:

代码语言:javascript
复制
let onRemoveItem = PublishSubject<IndexPath>()

查看控制器视图模型,其中单元格和ViewModel被绑定:

代码语言:javascript
复制
 let vm = ItemViewModel(with: item)
            vm.onRemoveItem.bind(to: self.onRemoveItem).disposed(by: self.rx.disposeBag)

            return SectionItem.item(viewModel: vm)

视图主计长:

代码语言:javascript
复制
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)

控制台调试:

代码语言:javascript
复制
onRemoveCartIemTapped0
onRemoveCartIemTapped3
onRemoveCartIemTapped1
onRemoveCartIemTapped4
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-03 09:15:02

这是由UITableView重用单元格造成的。若要避免有多个订阅,可以重写单元格的prepareForReuse()方法,并确保释放所有现有订阅。

我通常将DisposeBag声明为var,然后在prepareForReuse()中为它分配一个新的DisposeBag。当DisposeBag被删除时,它将释放它包含的所有订阅。类似于:

代码语言:javascript
复制
override func prepareForReuse() {
    super.prepareForReuse()

    cellDisposeBag = DisposeBag()
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54007149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档