2015-12-02 2 views
0

Dans mon application iOS, je suis confronté à un problème dans mon UITableView. Chaque cellule de ma vue de table contient trois icônes (trois petites images représentant un skateboard, un vélo et un roller). Découvrez une capture d'écran de cette vue de la table en regardant la première capture d'écran de l'application here et vous verrez de quoi je parle.Les cellules UITableView sont corrompues lors du défilement

Ces trois icônes qui s'affichent dans chaque cellule de ma vue de table sont "teintées" en noir ou en gris en fonction d'une valeur booléenne récupérée de manière asynchrone à partir d'un appel API. Jusqu'à présent, lorsque vous utilisiez l'application, chaque cellule avait toujours les trois icônes en noir, donc je n'ai jamais rencontré de problèmes ... jusqu'à ce que je teste ce qui se passe quand l'une des icônes est censée être grise.

Lorsque toutes les icônes sont noires, il n'y a aucun problème. Quand une seule icône dans une cellule est censée être grise, tout l'enfer se déchaîne. Au départ, la vue de la table se chargera correctement et il n'y aura qu'une seule icône grisée. Mais lorsque vous faites défiler vers le bas ou que vous tirez pour rafraîchir la vue du tableau, tout d'un coup, d'autres cellules commencent à contenir des icônes grises lorsqu'elles ne le sont pas. Les cellules deviennent de plus en plus corrompues lorsque vous faites défiler vers le haut et vers le bas et, finalement, la plupart des cellules ont des icônes grises lorsqu'une seule cellule le devrait vraiment. C'est bizarre ... c'est comme si l'icône grise se multipliait et infectait ma vue de table lol.

Le problème ici est que je ne sais pas comment utiliser correctement et mettre à jour les cellules dans UITableView. Je ne sais vraiment pas quel est le problème. Je ne suis pas tout à fait expérimenté dans iOS dev. Mon code est assez bâclé et quelque peu embarrassant, mais j'apprécierais que vous le feuilliez et que vous me disiez ce que je fais de mal.

Voir le code correspondant à ce problème here. Merci pour l'aide!

+0

Ne pas publier de liens vers votre code. Mettez le code pertinent (et correctement formaté) dans votre question. – rmaddy

+0

@rmaddy Merci, désolé à ce sujet. Je ne savais pas trop quel code était pertinent à mon problème, d'où la raison pour laquelle j'ai posté un lien vers tout cela. Je ne ferai plus ça. – dulin95

Répondre

2

Vous devez définir UIImageView.image à la couleur différente en fonction de votre valeur bool.

if (!parkForIndexPath(indexPath).skateboardersAllowed()) { 
    skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.darkGrayColor()) 
} else { 
    skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.blackColor()) 
} 

La raison pour une partie de votre image devient grise pendant le défilement est parce que vous réutilisez la cellule, de sorte que lorsque la cellule avec l'image grise se réutilisé, l'image grise encore persister puisque vous ne réinitialisez pas la couleur.

+0

Merci, cela a fonctionné. Erreur stupide, réponse utile. – dulin95

0

Cependant, vous créez les cellules du tableau dont vous avez besoin pour les réinitialiser à une valeur de base. Je devine que vous l'avez actuellement défini de sorte que s'il rencontre le paramètre booléen il le place en gris sinon noir. Réglez-les tous au début et ensuite, si le booléen est atteint, réglez-le sur gris.

else if (indexPath.row < self.parks.count) { 
    skateboardIcon.image = skateboardIcon.image?.imageWithColor(UIColor.darkGrayColor()) 
} 

reste du code où il se prépare si elle satisfait aux paramètres