4

假设我有一个UIButtonin a UITableViewCell。将单元格从UITableView我想订阅的UIButton.rx.tap. 问题是,如果 myUITableViewCell多次出队,订阅将保留。Disposable目前,我通过在 my 中分配一个属性、在UITableViewCell创建订阅时设置它并调用Disposable.dispose()on来解决这个问题UITableViewCell.prepareForReuse(),但是据我了解,以需要您调用的方式实现功能Disposable.dispose()意味着您做错了什么。

有没有更好的方法来完成订阅的唯一性而无需重新分配UIButton

4

2 回答 2

13

另一种解决方案(不需要额外的库或调用Disposable.dispose())是DisposeBag在单元格中有一个并在 中重新创建它prepareForReuse,如此GitHub 问题中所建议的:

//in the cell 

private(set) var disposeBag = DisposeBag()

override func prepareForReuse() {
   super.prepareForReuse()
   disposeBag = DisposeBag()
}


//in the data source
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! DiaryItemCell

cell.commentButton.rx_tap
            .subscribeNext{

            }.addDisposableTo(cell.disposeBag)

return cell

如果您的单元格中有更多按钮(或您想要订阅的其他 Observables),它也将起作用。您不必Disposable在单元格本身中为它们中的每一个创建一个新的。

于 2016-12-12T10:58:17.670 回答
1

您可以使用Cell-Rx pod 形式正确使用UITableViewCell. 对于您可以使用的情况rx_reusableDisposeBag,它将正确处理您的订阅。

于 2016-12-09T13:10:15.087 回答