How to define a color scheme in Xcode
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:
Protocol-Oriented Themes for iOS Apps
You can choose to loop subviews added in the parent view. And can define a set of elements you want to change colors.
So you code might look like below
-(void)defineColors:(UIView *)parent{
for(UIView *view in parent.subviews){
if(view.tag == TAG1){
[self setColor:COLOR1 forControl:view];
}else if(view.tag == TAG2){
[self setColor:COLOR2 forControl:view];
}
}
}
-(void)setColor:(UIColor *)color forControl:(UIView *)control{
if([control isKindOfClass:[UILabel class]]){
[(UILabel *)view setBackgroundColor:color];
}else if([control isKindOfClass:[UITextField class]]){
[(UITextField *)view setTextColor:color];
}
//So on..
}
I hope it helps.
Cheers.
Code Updated
You can choose to define set of tags for controls you want to assign an specific color, and then set the color accordingly..
Update 2
As per your edited question, you can have a standalone xib
in which you can have different small UIView
added and you can define colors from xib
. Create outlets for different views. And then load the nib in AppDelegate
to fetch different colors you want to use you app, and you can save them into a Singleton Class
so that you can get them anytime without multiple initializations.