J'ai écrit un code pour que la couleur de la bordure de la cellule change en fonction de inStock ou outStock, si elle est inStock, elle sera rouge, sinon elle serait verte, mais cela ne fonctionne pas pour moi, je l'ai mis dans willDisplayCell et voici mon code:
func tableView(_ tableView: UITableView,
willDisplay cell: UITableViewCell,
forRowAt indexPath: IndexPath){
cell.backgroundColor = UIColor.clear
cell.contentView.backgroundColor = UIColor.clear
let whiteRoundedView : UIView = UIView(frame: CGRect(x:10,y: 5,width: self.view.frame.size.width - 20,height: 214))
whiteRoundedView.layer.masksToBounds = false
whiteRoundedView.layer.cornerRadius = 5.0
whiteRoundedView.layer.shadowOffset = CGSize(width: -1,height: 1)
whiteRoundedView.layer.borderWidth = 2
cell.contentView.addSubview(whiteRoundedView)
cell.contentView.sendSubview(toBack: whiteRoundedView)
if stock[indexPath.row] == "inStock" {
whiteRoundedView.layer.borderColor = UIColor.red.cgColor
}
else {
whiteRoundedView.layer.borderColor = UIColor.green.cgColor
}
}
Essayez de déplacer votre code dans la méthode cellForRowAt
comme ça
cell.layer.masksToBounds = true
cell.layer.cornerRadius = 5
cell.layer.borderWidth = 2
cell.layer.shadowOffset = CGSize(width: -1, height: 1)
let borderColor: UIColor = (stock[indexPath.row] == "inStock") ? .red : .green
cell.layer.borderColor = borderColor.cgColor
Vous ajoutez votre heure multiple whiteRoundedView pour chaque cellule - à mesure que les instances de cellules sont réutilisées.
Vous ne devez créer ceci qu'une seule fois (lors de la création de UITableViewCell) - puis en manipuler la couleur ensuite dans la fonction willDisplayCell.
Je suggérerais de créer une UITableViewCell personnalisée, mais vous pouvez également éviter ce problème en utilisant la propriété view "tag" et en vérifiant s’il existe déjà.