web-dev-qa-db-ja.com

RxSwiftは選択時にテーブルビューセルを変更します

アプリにテーブルビューがあります。次のコードを使用して、このテーブルのデータソースを生成しました

struct ContactNameNumberBlockStatus {
    var contactThumbnail: Data?
    var contactName : String
    var contactNumber: String
    var blockStatus : Bool
}

class BlockListTableViewCell: UITableViewCell {
    @IBOutlet weak var contactImage: UIImageView!
    @IBOutlet weak var contactName: UILabel!
    @IBOutlet weak var contactNumber: UILabel!
    @IBOutlet weak var blockButton: UIButton!
    var eachCell : ContactNameNumberBlockStatus! {
        didSet {
            // setting ui
        }
    }
}

private func showTableContent(data :   Observable<[ContactNameNumberBlockStatus]>) {
        data.bindTo(tableView.rx.items(
            cellIdentifier: "BlockListTableViewCell")) {
            row, contributor, cell in
            if let cell2 = cell as? BlockListTableViewCell {
                cell2.eachCell = contributor
            }
            }.addDisposableTo(disposeBag)
}

セルをタップすると、上部に記載されているblockButtonを表示/非表示にしてUIを更新したい

これを行う方法 ??

rxを使用する前に、私は次のようにテーブルビューのdidSelectRowAtを使用しました

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        contacts[indexPath.row].blockStatus = false
        self?.tableView.reloadData()
}

見つけた tableView.rx.itemSelectedは上記と同じdidSelectRowAtですが、次のコードを使用してテーブルビューを更新する方法を見つけることができません

tableView.rx.itemSelected
  .subscribe(onNext: { [weak self]indexPath in

  }).addDisposableTo(disposeBag)

では、セルを更新する方法は?

10
LynAs

このようにセルにアクセスできます

tableView.rx.itemSelected
  .subscribe(onNext: { [weak self] indexPath in
    let cell = self?.tableview.cellForRow(at: indexPath) as? SomeCellClass
    cell.button.isEnabled = false
  }).addDisposableTo(disposeBag)
52
Daniel Poulsen