it-swarm.com.ru

Swift Изменить цвет границы ячейки таблицы в соответствии с данными

Я написал код для изменения цвета границы ячейки в соответствии с inStock или outStock, если это inStock, это будет красная граница, иначе она будет зеленой, но я не работаю для меня, я положил ее в willDisplayCell и вот мой код:

 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

Попробуйте переместить ваш код в метод cellForRowAt

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

Вы добавляете свой whiteRoundedView несколько раз для каждой ячейки - так как экземпляры ячейки используются повторно.

Вы должны создать его только один раз (при создании UITableViewCell), а затем управлять его цветом после этого в функции willDisplayCell.

Я бы предложил создать пользовательский UITableViewCell, но вы также можете избежать этой проблемы, используя свойство view «tag» и проверяя, существует ли оно уже.

0
Grzegorz Krukowski