2011-04-19 60 views
1

我从文件中读取NSString,然后我想#将它定义为UIColor,以便快速更改颜色。从NSString或类型转换NSString中删除@“”到变量名称

我想要的东西,像这样的工作:

#define GRAY [UIColor darkGrayColor] 

然后从文件中读取的字符串:@“灰色”,并把它称为kColor

一个的NSString变量

,再将其粘贴到的backgroundColor财产像这样:

myController.view.backgroundColor = kColor; 

现在,这意味着我得到:

myController.view.backgroundColor = @"GRAY"; 

我需要:

myController.view.backgroundColor = GRAY; 

为#定义工作。那么,如何从字符串中删除@“”或将字符串转换为变量名?我没有被困在#define中,所以如果有另一种方法来实现这一点,我愿意接受。

非常感谢帮助。

+0

你的'define'位于哪里? – 2011-04-19 15:58:45

+3

'myController.view.backgroundColor = GRAY;'有什么问题? – BoltClock 2011-04-19 15:59:05

+0

if语句有什么问题? – 2011-04-19 16:04:57

回答

2

您可以将颜色加载到NSDictionary

// Put this in some global scope 
NSDictionary *colors = [NSDictionary dictionaryWithObjectsAndKeys: 
    [UIColor darkGrayColor], @"GRAY", nil]; 

// using the dictionary 
myController.view.backgroundColor = [colors objectForKey:kColor]; 
+0

这有效!而且它很简单,我不知道为什么我没有想到它自己;)谢谢你帮助我解决问题。 – user715510 2011-04-19 16:29:12

0

你不能那样做。 Objective-C是一种编译语言,因此您不能像使用一段代码那样使用NSString。您将需要一种方法来从文件中读取从字符串/ NSString中返回正确的颜色。

+0

包括LLVM库,编译yit和动态链接:) – 2011-04-19 16:02:53

+1

你可以实际上。您可以使用'NSSelectorFromString()'和'NSClassFromString()'将字符串转换为选择器或类。 – JeremyP 2011-04-19 16:05:07

+0

@JeremyP他不是在询问选择器,而是关于解析为一个定义的字符串。 – NWCoder 2011-04-19 16:06:40

2

当你说'从文件读取字符串:@“灰色”'你的意思是在应用程序运行时?如果是这样,那么你不能使用#define(s),这是在编译时发生的。

0

丹尼尔的答案可能是最好的。由于他没有提供任何代码,所以这是一个实现:

-(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]; 
}