I read a NSString from file and then I want to #define this as a UIColor so I can quickly change color\'s.
I want something to work like so:
#define GRAY
When you say 'read from file the string : @"GRAY"' do you mean at application run time? if so, then you cannot use #define(s), which are happening at compile time.
You could load the colors into a NSDictionary
.
// Put this in some global scope
NSDictionary *colors = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor darkGrayColor], @"GRAY", nil];
// using the dictionary
myController.view.backgroundColor = [colors objectForKey:kColor];
You can't do that. Objective-C is a compiled language, so you can't use a NSString
as if it were a piece of code. You will need a way to return a proper color from a string/NSString read from a file.
Daniel's answer is probably the best. Since he hasn't provided any code, this is one implementation:
-(UIColor*) colorFromString: (NSString*) colorName
{
static NSDictionary colors = nil;
if (colors == nil)
{
colors = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor darkGreyColor], @"GRAY",
[UIColor blueColor], @"BLUE",
// etc
nil];
[colors retain];
}
return [colors objectForKey: colorName];
}