Label dans une cellule d'une collectionView
Bonsoir à tous,
J'ai un souci, j'ai ajouté un label dans une cellule d'une collectionView :
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
num = UILabel(frame: CGRectMake(0, 0, 0, 0))
num.font = UIFont.boldSystemFontOfSize(12.0)
num.backgroundColor = UIColor.whiteColor()
num.textColor = UIColor.blackColor()
num.text = posts.objectAtIndex(indexPath.row).valueForKey("number") as? String
num.sizeToFit()
cell.contentView.addSubview(num)
}
le problème est que du texte semble affiché dessous le label (une précédente valeur d'un label d'une autre cellule certainement).
J'ai tenté de faire ceci :
func prepareForReuse()
{
prepareForReuse()
num.text = ""
}
Cela fonctionne pas.
Merci de votre aide.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'avais eu le même genre de problème. Le prepareForReuse() doit remettre la cellule dans son état initial, alors que tu modifie juste l'affichage du label. A chaque utilisation d'une cellule réutilisable tu ajoutes un nouveau label dans le contentView.
1 utilisation => 1 label dans le contentView
2 utilisation => 2 labels dans le contentView
...
50 utilisations => 50 labels dans le contentView - ça craint pour la charge mémoire et la vitesse d'affichage.
100 utilisations => Arg...
Le plus spectaculaire c'est d'utiliser une couleur presque transparente comme backgroundColor du label. A chaque utilisation tu vas voir l'affichage devenir de plus en plus sombre, les couches de couleurs s'empilant les unes sur les autres. C'est le bug que j'ai eu à ma première tentative d'utilisation d'une UICollectionViewCell.
Ce qu'il faut faire, c'est effacer le label du contentView dans le prepareForReuse, ou alors utiliser une UICollectionViewCell personnalisée, contenant un label. J'ai testé les deux solutions, la seconde est la meilleure.
Tu peux accéder au contenu du contentView avec la propriété subviews permettant d'accéder au tableau contenant toutes les sous-vues.
Ajoute le code suivant dans la création de la cellule et tu vas vite comprendre à quelle vitesse les labels s'empilent (inutilement) dans le contentView.
Merci !
alors j'ai choisi la solution de l'UICollectionViewCell personnalisée.
Je ne sais pas encore trop utiliser les XIB.