web-dev-qa-db-fra.com

RxSwift modifie la cellule de la table sur certains

J'ai une vue de table dans mon application. J'ai généré la source de données pour cette table en utilisant le code suivant

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)
}

Maintenant, lorsque je tape sur la cellule, je veux mettre à jour l'interface utilisateur en affichant/masquant blockButton mentionné en haut

comment faire ça ??

avant d'utiliser rx j'ai utilisé le didSelectRowAt de la vue de table comme suit

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

Je l'ai trouvé tableView.rx.itemSelected est le même que ci-dessus didSelectRowAt mais je n'arrive pas à trouver comment mettre à jour la vue de la table en utilisant le code suivant

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

  }).addDisposableTo(disposeBag)

Alors, comment mettre à jour la cellule?

10
LynAs

Vous pouvez accéder à la cellule comme ceci

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