I'd like to define a color scheme for my iOS project, in a way that it's easy to replace some colors. Let's say I have a "main" color and a "secondary" color, used in many elements in my app, and in a future I maybe want to set the "main" color to any other value that the one it currently has.
So far I've been using a custom UIColor
category to define and use my colors in code, and creating a palette with the same colors for using it in IB and Storyboards.
This way, replacing colors in code is far straightforward, but doing it in IB and Storyboard is so painful... I didn't find an easy way to find/replace colors.
Any idea on how can I manage to do that? I'm open to any suggestion. Thank you in advance
EDIT 1: Maybe it's not clear enough in the question. I'd like to create a scheme such as I can use it both in code and in IB, but defining the colors only once, and being able to switch colors in a way that colors referenced both in code and in IB change accordingly.
An easy way i can do that in Swift:
First we have to create as many targets as we want schemes, doing click at actual scheme and select New scheme:
Creating at Assets Catalog Colors Set Colors.xcassets a color like:
Then select one Target membership at Colors.xcassets:
After that create another Colors.xcassets:
Then create again another color with same same at this new Colors.xcassets:
Then select another one Target membership at this new Colors.xcassets:
Then assign color by code using same name referenced (we use PrimaryColor), as in the following example:
struct Resources {
struct Colors {
//struct is extended in Colours
}
}
extension Colors {
struct Primary {
static let Default = UIColor(named: "PrimaryColor")!
}
}
And then the implementation:
newLabel.backgroundColor = Resources.Colors.Primary.Default
Finally depending on the scheme chosen, some colors or others will be drawn.
Another way that I have found is next link: