Глобальная цветовая палитра для Interface Builder

В скором времени я пишу расширение (например, категорию Obj-C), которое поддерживает в коде методы класса "house colors". Мне интересно, есть ли способ сделать это расширение цвета доступным для Интерфейсного разработчика, используя IBInspectable или что-то еще, в отличие от присоединения цветов специально к подклассам UIView, как я видел во многих примерах использования IBInspector.

extension UIColor {
    // house blue
    @IBInspectable var houseBlue: UIColor { return UIColor(red:(51/255), green:(205/255), blue:(255/255), alpha:(1)) }

    // house gray
    @IBInspectable var houseGray: UIColor { return UIColor(white:0.4, alpha: 1) }

    // house white
    @IBInspectable var houseWhite: UIColor { return UIColor.whiteColor() }
}

2 ответа

Решение

Лучшее решение, которое я нашел для этой проблемы, - это создание каталога активов для цветов дома, который может быть использован Интерфейсным Разработчиком.

https://blog.zeplin.io/asset-catalog-colors-on-xcode-9-c4fdccc0381a

Насколько я знаю, вы не можете программно определять цвета, которые затем будут отображаться в Интерфейсном Разработчике, но вы можете расширить UIColor для пользовательских цветов для использования в вашем коде:

extension UIColor {

   static func myCustomColor() -> UIColor {
     return UIColor(red: 23/255.0, green: 175/255.0, blue: 72/255.0, alpha: 1.0)
   }

}

И для ссылки на пользовательский цвет:

myView.backgroundColor = UIColor.myCustomColor()

Это не полностью решает вашу проблему, но потенциально может быть лучше устанавливать цвета программно, чем через IB. Это позволит вам изменить значение в коде один раз, чтобы изменить цвет во всем приложении, вместо того, чтобы настраивать его несколько раз для каждого элемента пользовательского интерфейса через Interface Builder.

Другие вопросы по тегам