RxDatasources에서 Multiple Tap 현상 해결방법

kyle Kim·2022년 3월 28일
0

iOS개발

목록 보기
5/22

RxCollectionView나 RxTableView를 만들다가 button이나 다른 요소를 Tap할때 여러 번 Tap이 일어나는 경우가 발생했다. 여러가지 많이 시도해보고 해결책을 찾았다.

  1. 우선 custom으로 만든 cell에 DisposeBag을 하나 만들어준다.
class CustomCell: UICollectionViewCell {
    var cellDisposeBag = DisposeBag()
	...
}
  1. CustomCell의 prepareForReuse에서 새로운 DisposeBag를 선언해주는 코드를 넣는다.
override func prepareForReuse() {
        super.prepareForReuse()
        self.cellDisposeBag = DisposeBag()
}
  1. Datasource를 선언한 부분안에 button의 tap에 대한 action을 적어준다.
...
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)
                })
  1. 가장 중요한 부분은 dispose를 어디에 할지 정해주는 부분이다. (나는 여기서 실수가 있었음)
cell.starButton.rx
...
		}).disposed(by: cell.cellDisposeBag)

disposed할때 cell을 불러오는 ViewController의 DisposeBag를 사용하는게 아니라 cell이 가지고 있는 DisposeBag를 불러와줘야한다. 각 cell 마다의 tap이기 때문에 종료 시점이 cell이 기준이 되어야한다.

profile
가고일(gagoil)의 개발일지

0개의 댓글