/ / Comment effacer les éléments créés par programme depuis UITableViewCell avant sa réutilisation - iOS, Swift, TableView

Comment effacer des éléments créés par programme à partir de UITableViewCell avant sa réutilisation - ios, swift, tableview


J'écris une application dans Swift 3 quiimplique un UITableView. Je crée mes cellules de vue tabulaire de manière pragmatique. Le problème que je rencontre est que le texte de l'étiquette de la cellule est persistant après la fonction .reloadData (). Existe-t-il une fonction pour effacer tous les éléments et la mise en forme d'une cellule avant son utilisation? J'instancie UILabel via du code et je ne peux pas y accéder sur plusieurs itérations. Malheureusement, j'ai déjà consacré une tonne de temps à la création de la table par programmation, donc j'aimerais éviter de revenir en arrière et de créer une classe de cellule si possible.

Je prévois d'utiliser une fonction comme celle-ci:

var label: UILabel
if reloadCount > 0 {
//clear all formatting from the cell
}

label = UILabel(frame: CGRect(x: 30, y: 0, width: self.screenWidth - 100, height: 50))
label.textAlignment = .center
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.textColor = UIColor(red: 127.0/255, green: 140.0/255, blue: 142.0/255, alpha: 1.0)
label.font = UIFont(name: "Tahoma", size: CGFloat(22))
label.numberOfLines = 0
label.tag = Int(self.thoughtFeed[indexPath.row].dbId!)!
label.text = thoughtFeed[indexPath.row].thoughtText!.fromBase64()
label.isUserInteractionEnabled = true
label.addGestureRecognizer(labelTap)
cell.addSubview(label)

Merci beaucoup pour l'aide.

Réponses:

1 pour la réponse № 1

Vous "devrez en quelque sorte" vous souvenir "du UILabel et soit le réutiliser ou le supprimer. Puisque vous dites que vous ne voulez pas sous-classer UITableViewCell vous pouvez utiliser des balises pour obtenir une référence à votre étiquette. Dans votre cellForRowAtIndexPath faire quelque chose comme ça:

if let label = cell.viewWithTag(42) as? UILabel {
// now you have a reference to the existing label.
// Just update the text (or whatever you need to do)
} else {
label = UILabel(frame: CGRect(x: 30, y: 0, width: self.screenWidth - 100, height: 50))

// add a tag so we can remember it when we dequeue a cell later
label.tag = 42
cell.addSubview(label)
}