web-dev-qa-db-fra.com

Swift Change la couleur de la bordure de tableviewcell selon les données

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

    }



}
5
UncleJunior

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
6
SwiftStudier

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à.

0
Grzegorz Krukowski