Как установить разные цвета для каждого TableViewCell? - PullRequest
0 голосов
/ 20 марта 2020

Привет, я новичок в IOS разработке. Я пытаюсь дать разные цвета гекса для каждой ячейки таблицы. Следующий код, который меняет цвет contentView, не помогает.

var cellColors = ["F28044","F0A761","FEC362","F0BB4C","E3CB92","FEA375"]

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! CustomCells
        cell.contentView.backgroundColor = UIColor(named: cellColors[indexPath.row % cellColors.count])
    }

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

Вы не можете загрузить HEX цвет , используя UIColor(named:), вам нужно расширение UIColor, которое может взять строку (шестнадцатеричный код) и вернуть UIColor.

Добавьте это к своей базе кода:

extension UIColor {
    public convenience init?(hex: String) {
        let r, g, b, a: CGFloat

        if hex.hasPrefix("#") {
            let start = hex.index(hex.startIndex, offsetBy: 1)
            let hexColor = String(hex[start...])

            if hexColor.count == 8 {
                let scanner = Scanner(string: hexColor)
                var hexNumber: UInt64 = 0

                if scanner.scanHexInt64(&hexNumber) {
                    r = CGFloat((hexNumber & 0xff000000) >> 24) / 255
                    g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255
                    b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255
                    a = CGFloat(hexNumber & 0x000000ff) / 255

                    self.init(red: r, green: g, blue: b, alpha: a)
                    return
                }
            }
        }

        return nil
    }
}

Используйте это так:

let color = UIColor(hex: "#\(arrayItem)")

Подробнее здесь

0 голосов
/ 20 марта 2020

Добавьте приведенный ниже метод в расширение UIColor, как показано ниже, и инициализируйте цвета с помощью цветовых кодов.

extension UIColor {
     public convenience init(_ value: Int) {
         let red = CGFloat(value >> 16 & 0xFF) / 255.0
         let green = CGFloat(value >> 8 & 0xFF) / 255.0
         let blue = CGFloat(value & 0xFF) / 255.0
         self.init(red: red, green: green, blue: blue, alpha: 1.0)
     }
}

И ваш метод, подобный этому:

let color1 = UIColor(0xf123ac)
let color2 = UIColor(0xF5B2C1)

Просто убедитесь, что префикс вашего кода цвета с 0x.

...