订阅位于 UITableViewDataSource 内的 UITableViewCell 中的 UIButton.rx.tap
Subscription to a UIButton.rx.tap located in UITableViewCell within UITableViewDataSource
假设我在 UITableViewCell
中有一个 UIButton
。
从 UITableView
中取出单元后,我想订阅 UIButton.rx.tap
。问题是,如果我的 UITableViewCell
多次出列,订阅将保留。目前我通过在我的 UITableViewCell
中分配 Disposable
属性 来解决这个问题,在创建订阅时设置它,并在 UITableViewCell.prepareForReuse()
上调用 Disposable.dispose()
,但是作为据我了解,以需要您调用 Disposable.dispose()
的方式实现功能意味着您做错了什么。
有没有更好的方法可以在不重新分配的情况下实现订阅的唯一性UIButton
?
您可以在 UITableViewCell
中使用反应式订阅正确使用 Cell-Rx pod 形式。对于您的情况,您可以使用 rx_reusableDisposeBag
,它将正确处理您的订阅。
另一个解决方案(不需要额外的库或调用 Disposable.dispose()
)是在单元格中有一个 DisposeBag
并按照建议在 prepareForReuse
中重新创建它在这个 GitHub issue:
//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
如果您的单元格中有更多按钮(或您想要订阅的其他 Observable),它也会起作用。您不必在单元格中为它们中的每一个创建一个新的 Disposable
。
假设我在 UITableViewCell
中有一个 UIButton
。
从 UITableView
中取出单元后,我想订阅 UIButton.rx.tap
。问题是,如果我的 UITableViewCell
多次出列,订阅将保留。目前我通过在我的 UITableViewCell
中分配 Disposable
属性 来解决这个问题,在创建订阅时设置它,并在 UITableViewCell.prepareForReuse()
上调用 Disposable.dispose()
,但是作为据我了解,以需要您调用 Disposable.dispose()
的方式实现功能意味着您做错了什么。
有没有更好的方法可以在不重新分配的情况下实现订阅的唯一性UIButton
?
您可以在 UITableViewCell
中使用反应式订阅正确使用 Cell-Rx pod 形式。对于您的情况,您可以使用 rx_reusableDisposeBag
,它将正确处理您的订阅。
另一个解决方案(不需要额外的库或调用 Disposable.dispose()
)是在单元格中有一个 DisposeBag
并按照建议在 prepareForReuse
中重新创建它在这个 GitHub issue:
//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
如果您的单元格中有更多按钮(或您想要订阅的其他 Observable),它也会起作用。您不必在单元格中为它们中的每一个创建一个新的 Disposable
。