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