UITableView上に配置したボタンの動作がおかしい場合
反応しない、二重に処理が走ってしまうなど
disposedするDisposeBagオブジェクトをセル内で生成したものを利用する
大抵これで解決します。
disposeBagオブジェクトはセルの再利用のたびに新しく生成する必要があります。
セル側の例
class MyTableViewCell: UITableViewCell {
@IBOutlet weak var replyButton: UIButton!
var disposeBag = DisposeBag()
override func prepareForReuse() {
super.prepareForReuse()
self.disposeBag = DisposeBag() // ここで毎回生成
}
ビューコントローラー側
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView .dequeueReusableCell(withIdentifier: String(describing: MyTableViewCell.self), for: indexPath) as! MyTableViewCell
cell.talkButton.rx.tap.asDriver().drive(onNext: { [weak self] _ in
// タップ時の処理
}).disposed(by: cell.disposeBag) // セルで生成したDisposeBagオブジェクト
return cell
}