Max
Max

Reputation: 99

UITableViewCell selected by swipe not by tap

I'm using RxSwift for binding UITableView to data source. I want to select table cell in table view. Selection does not work by tap, but works well by swipe gesture. What could be the problem?

That's what I was truing to do:

Here my code

View Model

import Foundation
import RxSwift

class ViewModel {

    let selectItem: AnyObserver<String>
    let didSelectItem: Observable<String>

    let items: Observable<[String]>

    init() {
      let _selectItem = PublishSubject<String>()
      self.selectItem = _selectItem.asObserver()
      self.didSelectItem = _selectItem.asObservable()
      items = TestAppData.getData()
    }
}

ViewController

import UIKit
import RxSwift
import RxCocoa

class ViewController: BaseViewController {

  @IBOutlet weak var dataTableView: UITableView!

  var viewModel: ViewModel!

  override func viewDidLoad() {
    super .viewDidLoad()
    setup()
  }

  private func setup(){

    viewModel.items
      .observeOn(MainScheduler.instance)
      .bind(to: dataTableView.rx.items(cellIdentifier: "DataCell", cellType: UITableViewCell.self)) {
        (_, dataValue, cell) in
        cell.textLabel?.text = dataValue
        cell.selectionStyle = .none
      }
      .disposed(by: disposeBag)

    dataTableView.rx.modelSelected(String.self)
      .bind(to: viewModel.selectItem)
      .disposed(by: disposeBag)
  }
}

TableView and TableViewCell settings: enter image description here RxSwift 4.1.2, RxCocoa 4.1.2

Upvotes: 1

Views: 635

Answers (1)

Maxim Zakopaylov
Maxim Zakopaylov

Reputation: 556

Try this implementation

dataTableView.rx.itemSelected
            .subscribe(onNext: { [unowned self] indexPath in
                //DO something with cell
            }).disposed(by: disposeBag)

Upvotes: 0

Related Questions