RxCollectionView나 RxTableView를 만들다가 button이나 다른 요소를 Tap할때 여러 번 Tap이 일어나는 경우가 발생했다. 여러가지 많이 시도해보고 해결책을 찾았다.
class CustomCell: UICollectionViewCell {
var cellDisposeBag = DisposeBag()
...
}
override func prepareForReuse() {
super.prepareForReuse()
self.cellDisposeBag = DisposeBag()
}
...
var cell = collectionView.dequeueReusableCell(withReuseIdentifier: "repoCell", for: indexPath) as! CustomCell
cell.starButton.rx
.tapGesture()
.when(.recognized)
.subscribe(onNext: { [weak self] value in
guard let self = self else { return }
print(value)
})
cell.starButton.rx
...
}).disposed(by: cell.cellDisposeBag)
disposed할때 cell을 불러오는 ViewController의 DisposeBag를 사용하는게 아니라 cell이 가지고 있는 DisposeBag를 불러와줘야한다. 각 cell 마다의 tap이기 때문에 종료 시점이 cell이 기준이 되어야한다.