LoginSignup
2
5

More than 1 year has passed since last update.

[RxSwift]cell側のボタンtapをVCで検知する

Posted at

前提

例えば、
Rxを使用するプロジェクトでCell内部のbuttonタップ検知を行いたい場合は多くあると思います。
しかし、Rxを採用しているのでCell側のbuttonでaddTargetしてDelegateを使って。。。のようなことはあまり使うべきではないです。

そもそもRxはそれらの課題解決を目的としても作られた背景もあります。

ではどのように実装しましょうか。

実装方法はいくつかあると思うのですが、今回はそのうちの一つを紹介していきたいと思います。

RxSwiftを採用しているということはおそらくMVVMアーキテクチャを合わせて採用していると思います。
MVVMアーキテクチャではViewController側でViewModelの参照を持つことがあります。しかしカスタムセルを作っている場合cell側でもViewModelの参照を持たせて。。といった感じになります。
大きなプロジェクトでは話は別ですが、タップ検知しかしないcell側でViewModelの参照を持たせて、DIさせてと毎回書くのは面倒だし(この行為自体は悪いことではない)タップ検知をしたいだけなのに他に書くコードが多すぎて冗長にも感じられるかと思います。

そのような時はViewController側でコードを書いてあげることも一つの手でしょう。

     // cell内のお気に入りボタンタップを検知する
    cell.favoriteButton.rx.tap
        .subscribe(onNext: { _ in
            viewModel.input.favoriteButtonTapped.onNext(())// ViewModelにイベントを送る
         }).disposed(by: cell.disposeBag)// ←cell側のdisposeBagを使用する
2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5