esreli
esreli

Reputation: 5071

Global Color Palette for Interface Builder

In swift i'm writing an extension (like Obj-C category) that maintains in code class methods of "house colors." I'm wondering if there is a way to make this color extension accessible to Interface builder using IBInspectable or something else as opposed to attaching colors specifically to UIView subclasses as i've seen in a lot of IBInspector sample usage.

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() }
}

Upvotes: 11

Views: 2262

Answers (2)

esreli
esreli

Reputation: 5071

The best solution I have found to this problem is to build an asset catalog of house colors, which can be used by Interface Builder.

https://help.apple.com/xcode/mac/current/#/dev10510b1f7

Upvotes: 2

Daniel Kuntz
Daniel Kuntz

Reputation: 66

As far as I know, you can't programatically define colors that will then show up in Interface Builder, but you can extend UIColor for custom colors to use in your code:

extension UIColor {

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

}

And to reference the custom color:

myView.backgroundColor = UIColor.myCustomColor()

This doesn't completely solve your issue, but it could potentially be better to set colors programatically than through IB. It would allow you to adjust a value one time in code to change a color throughout the app rather than having to adjust it multiple times for each UI element through Interface Builder.

Upvotes: 3

Related Questions