Как преобразовать стандартные имена цветов в строке в значения UIColor - PullRequest
1 голос
/ 13 апреля 2020

У меня есть переменная:

var colorName = String()

Мне нужен цвет оттенка кнопки, чтобы он был соответствующего цвета. Делать следующее:

cell.btn.tintColor = UIColor.red 

работает для меня. Но мне нужно использовать мою переменную colorName вместо выражения "UIColor.red".

Как бы я инициализировал UIColor строкой red, чтобы она была UIColor.red?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Поскольку для этого не существует заранее определенного метода, поэтому нам необходимо создать собственный метод, чтобы вы могли использовать метод, определенный ниже: -

func chooseColor(_ name: String) -> UIColor{
Switch name{
case “red”:
    UIColor.red //or you can use hex colors here
case “blue”:
    UIColor.blue
case “brown”:
    UIColor.brown
case “green”:
    UIColor.green
case “yellow”:
    UIColor.yellow
default :
    UIColor.black
}
}

Затем вы можете получить к нему доступ называя это как названный в заявлении ниже: -

 cell.btn.tintColor = chooseColor("red")
0 голосов
/ 13 апреля 2020

Нет встроенной функции для создания UIColor с именем. Вы можете написать расширение, например, Пол Хадсон , найденный здесь: https://www.hackingwithswift.com/example-code/uicolor/how-to-convert-a-html-name-string-into-a-uicolor

Упрощенный пример:

extension UIColor {
    public func named(_ name: String) -> UIColor? {
        let allColors: [String: UIColor] = [
            "red": .red,
        ]
        let cleanedName = name.replacingOccurrences(of: " ", with: "").lowercased()
        return allColors[cleanedName]
    }
}

И затем использовать it:

let redColor = UIColor().named("red")

Вы также можете определить xcassets, как в этой статье: https://medium.com/bobo-shone/how-to-use-named-color-in-xcode-9-d7149d270a16

И затем использовать UIColor(named: "red")

...