2016-07-20 16 views
4

Je crée une application qui utilise des cellules colorées pour séparer les autres cellules en catégories. Je le fais en coloriant les cellules de différentes couleurs en utilisant des instructions if else. Mais pour une raison quelconque, lorsque je lance l'application, plus je défile sur la vue de la table, plus les autres cellules changent de couleur de manière aléatoire. Voici le code dans ma classe instrumentTableCell personnalisée:Table View Cellules changeant de couleurs lors du défilement Swift

@IBOutlet var nameLabel: UILabel? 
@IBOutlet var descriptionLabel: UILabel? 
@IBOutlet var thumbnailImage: UIImageView! 

func configurateTheCell(recipie: Recipie) { 
    self.nameLabel?.text = recipie.name 
    self.descriptionLabel?.text = recipie.description 
    self.thumbnailImage?.image = UIImage(named: recipie.thumbnails) 
    if nameLabel!.text == "Instrument" 
    { 
     backgroundColor = UIColor.orangeColor() 
     nameLabel?.textColor = UIColor.blackColor() 
    } 
    else if nameLabel!.text == "Optional addon" 
    { 
     backgroundColor = UIColor.cyanColor() 
    } 

} 
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if nameLabel!.text == "Instrument" 
    { 
     return 20 
    } 
    else if nameLabel!.text == "Optional addon" 
    { 
     return 20 
    } 
    else 
    { 
     return 100 
    } 


} 

et c'est ce que l'application ressemble lors de son lancement: when the app is launched

contre lorsque l'utilisateur a fait défiler un petit peu: after scrolled around

aussi si quelqu'un sait comment, je voudrais que les cellules colorées soient aussi plus petites donc l'application semble plus agréable.

+0

nous montrent le contenu de 'cellForRowAtIndexPath:' méthode – arturdev

+3

Il est parce que sont réutilisées Celles. Pour après sinon si nameLabel! .text == "Addon facultatif" {backgroundColor = UIColor.cyanColor()} 'faire' else {backgroundColor = UIColor.clearColor()} '(ou whiteColor()) – Larme

+0

@Larme merci cela a fonctionné ! – zach2161

Répondre

2

Vous pouvez définir la méthode de délégué cellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("your identifier", forIndexPath: indexPath) 
    if cell.recipie.name == "Instrument" 
    { 
     backgroundColor = UIColor.orangeColor() 
     nameLabel?.textColor = UIColor.blackColor() 
    } 
    else if cell.recipie.name == "Optional addon" 
    { 
     backgroundColor = UIColor.cyanColor() 
    } 
    else{ 
    backgroundColor = UIColor.whiteColor() 
    } 
    return cell 
}