Цвет UITableViewCell не остался прежним после того, как я установил его в своем классе - PullRequest
0 голосов
/ 14 января 2019

В моем классе UITableViewCell есть функция, которая настраивает cellViewColor. У меня есть массив объектов и на основе некоторых полей я определяю, должен ли cellView быть серым, красным или бирюзовым. Когда табличное представление повторно использует ячейку, оно меняет цвета случайным образом.

class WidgetCell: UICollectionViewCell {
@IBOutlet weak var cellView: UIView!
@IBOutlet weak var mainValue: UILabel!
@IBOutlet weak var placeDetails: UILabel!
@IBOutlet weak var place: UILabel!
@IBOutlet weak var image: UIImageView!


func configureCell(entity: EntityModel) {
    self.mainValue.text = entity.monitor?.value
    self.placeDetails.text = entity.name
    self.place.text = entity.name
    self.cellView.applyGradient(withColours: setDeviceStateColor(deviceState: helper(entity: entity) ))
}

private func setDeviceStateColor(deviceState: DeviceState) -> [UIColor] {
    switch deviceState {
    case .alert:
        return [UIColor.red, UIColor.red]
    case .on:
        return [Colors.lightTurcoazLIH, Colors.mediumTurcoazLIH]
    case .off:
        return [UIColor.lightGray,UIColor.darkGray]
    }
}


extension UICollectionViewCell {
func helper(entity: EntityModel) -> DeviceState {
    let state = entity.monitor?.state ?? false
    let alert = entity.monitor?.alert ?? false
    if state && alert {
        return .alert
    } else if state && alert == false {
        return .on
    } else {
        return .off
    }
}

Это что-то, связанное с декой клеток.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! WidgetCell
    cell.configureCell(entity: favoriteDevices[indexPath.row])

    return cell
}

Надеюсь, все понятно, и мои объяснения имеют смысл.

Кроме того, здесь применяется applyGradient (withColors :)

func applyGradient(withColours colours: [UIColor]) {
    let gradient: CAGradientLayer = CAGradientLayer()
    gradient.frame = self.bounds
    gradient.cornerRadius = 3
    gradient.colors = colours.map { $0.cgColor }
    gradient.startPoint = CGPoint.init(x: 0.0, y: 0.0)
    gradient.endPoint = CGPoint.init(x: 0.0, y: 1.0)
    self.layer.insertSublayer(gradient, at: 0)
}

1 Ответ

0 голосов
/ 21 января 2019

Пожалуйста, добавьте значение default в оператор switch в методе setDeviceStateColor.

Это может вам помочь. Спасибо.

...