Swift Alternating UITableViewCell градиентный цвет - PullRequest
0 голосов
/ 23 октября 2018

Раньше у меня был этот код в методе tableView willDisplay cell, но он не давал точного чередования цветов - он почти имел место, но иногда все же путался с 1 или 2, которые были одного цвета, и я не был уверен.

Я нашел кое-что, что предлагало вызывать все методы в методе awakeFromNib в моем пользовательском классе UITableViewCell, поэтому я переместил все так:

class SectionTableViewCell: UITableViewCell {
    @IBOutlet weak var lblName: UILabel!
    @IBOutlet weak var lblValue: UILabel!

    var cellGradient_1: CAGradientLayer = CAGradientLayer()
    var cellGradient_2: CAGradientLayer = CAGradientLayer()

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
        self.layer.insertSublayer(cellGradient_1, at: 0)
        self.layer.insertSublayer(cellGradient_2, at: 0)
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        cellGradient_1.frame = self.bounds
        cellGradient_2.frame = self.bounds
    }

}

Теперь в моем tableView cellForRowAt Iсделайте эту проверку:

let cell = tableView.dequeueReusableCell(withIdentifier: "Section", for: indexPath) as! SectionTableViewCell
if (indexPath.row%2 == 0) {
    cell.cellGradient_1.colors = theme.childColor_1 //Some gradient color
}
else{
    cell.cellGradient_2.colors = theme.childColor_2 //Some gradient color
}

Теперь все они первого цвета, а 1 рядом с нижним цветом является вторым цветом.Я что-то не так делаю с nib?Есть ли другой способ установить цвета градиентов?Любая помощь будет принята с благодарностью.

Редактировать: Похоже, что она работает при начальной загрузке, но как только таблица перезагружается или происходит прокрутка, все градиенты ячейки изменяются на исходные, кроме 2 или 3.

1 Ответ

0 голосов
/ 23 октября 2018

Вы используете два слоя, и первый слой покрывает второй слой.
Чтобы решить эту проблему, просто удалите второй слой и измените код в tableView cellForRowAt на:

let cell = tableView.dequeueReusableCell(withIdentifier: "Section", for: indexPath) as! SectionTableViewCell
if (indexPath.row%2 == 0) {
    cell.cellGradient_1.colors = theme.childColor_1 //Some gradient color
}
else{
    cell.cellGradient_1.colors = theme.childColor_2 //Some gradient color
}

(я заменил ячейку.cellGradient_2 с cell.cellGradient_1)

...