J'ai une vision de la table et son personnalisé TableViewCell ressemble à ...
La case à cocher Nommé Option code> est configurée à l'aide de délégués et est accessible dans la zone ViewController comme ... P>
class UpdatingListTableViewCell: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var optionBtn: RoundButton!
@IBOutlet weak var plannedBtn: RoundButton!
@IBOutlet weak var doneBtn: RoundButton!
@IBOutlet weak var whoTextField: UITextField!
@IBOutlet weak var stdProcedLbl: UILabel!
@IBOutlet weak var nameLbl: UILabel!
var delegate: updatingDelegate?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
plannedBtn.isEnabled = false
doneBtn.isEnabled = false
whoTextField.delegate = self
whoTextField.autocorrectionType = .no
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
@IBAction func optionBtnTapped(_ sender: RoundButton) {
if let _ = delegate {
delegate?.optionBtnTapped(cell: self)
}
}
@IBAction func plannedBtnTapped(_ sender: RoundButton) {
if let _ = delegate {
delegate?.plannedBtnTapped(cell: self)
}
}
@IBAction func doneBtnTapped(_ sender: RoundButton) {
if let _ = delegate {
delegate?.doneBtnTapped(cell: self)
}
}
}
4 Réponses :
Le utableviewCell code> s est réutilisé, si vous souhaitez définir les données correctes dans une cellule chaque fois que vous faites défiler, vous devez remplir les données de cellule entières pour la cellule correspondante dans le
code> méthode car il sera appelé chaque fois que vous faites défiler vers une nouvelle cellule. P>
Oui. ... Mais je ne suis pas sûr de la façon dont je peux le faire dans mon cas ...
Si l'état de la cellule change le stocker et remplit les données en conséquence. Dans votre cas, vous semblez changer l'image d'une cellule sélectionnée, définissez à nouveau l'image lorsque cette index est appelée.
Mais je peux sélectionner plusieurs cellules également ... Si je sélectionne deux cellules, comment puis-je comparer ces deux index lors du défilement ...?
Vos cellules sont en cours de réutilisation, une fois une case à cocher sélectionnée et que vous ne réinitialisez pas la case la case ultérieurement, son état UI est réutilisé pour un chemin d'index différent. Vous pouvez réinitialiser votre case à cocher dans la fonction PREPARYFORREUSE CODE> de Cell's PREPREPREERUSE Assurez-vous d'affecter l'état de la case à cocher correct dans
CellforNatindexPath code>. P>
Vous devez réinitialiser la cellule optionbtn.isselected = false code> et
optionbtn.setimage (nil, pour: .normal) code> Propriétés dans
PREPAREPORERUSE () Code>, comme suit (à l'intérieur de votre
UitaireViewCell code> Sous-classe):
override func prepareForReuse() {
super.prepareForReuse()
optionBtn.isSelected = false
optionBtn.setImage(nil, for: .normal)
}
@ user987654, ahh yea- Vous devez également réinitialiser optionbtn.image code> à nil sur la réutilisation, voir la mise à jour
Maintenant, les cellules que je n'ai pas sélectionnées ne montrent pas la sélection, mais celle sélectionnée est également réinitialisée à @ 10623169
Comme indiqué par d'autres réponses, le problème est lié à la cellule étant réutilisée. Pour résoudre votre problème, vous devez stocker l'état de sélection de chaque index, cela peut être effectué avec une matrice ou un objet personnalisé. Dans cet exemple, une liste simple Ici, le L'étape finale consiste à mettre à jour toujours la cellule avec le dernier statut de sélection enregistré. p> isselectedlist code> sera utilisée.
OptionBTNTAPED code> est utilisé pour enregistrer l'état de sélection lors de son évolution. p>
Ok @ claudio..so pour les autres cases à cocher et Textfield aussi, je vais devoir répéter la même chose ..?
Oui. Vous devez avoir toutes les données stockées, et chaque fois que la cellulefroworat est appelée, vous devez mettre à jour toutes les cases à cocher et les champs de texte, sinon des incohérences sur les cellules présentées seront incohérentes.
sa ne fonctionne pas @Claudio ... Les cases à cocher se répètent à nouveau ...
S'il vous plaît expliquer mieux vous-même, que voulez-vous dire en répétant?
ok @claudio. J'avais sélectionné la case à cocher à la première cellule. Mais lorsque j'ai défilé les cases à cocher des autres cellules apparaissent également sélectionnée.
C'est probablement parce que vous ne réinitialisez pas la cellule, sur la TableView Cellforat vous permet de désactiver la boîte de sélection.
Pouvez-vous peut-être simplement montrer comment je peux faire ça @claudio ..?
Ont édité la question avec le code de tableviewcell. @ Claudio
J'ai mis à jour ma réponse, vous devrez ajouter la logique sur la méthode définie pour représenter les modifications.