如何使用UIColor名称传递参数?

3
我可以帮您进行翻译。以下是您需要翻译的内容:

我想知道如何将UIColor的名称传递给特定的方法?

编辑:

- (id) setLabel:(NSString *)text WithColorName:(NSString *)nameOfColor FontName:(NSString *)f_name FontSize:(float)f_size abel:(UILabel *)templbl
{
  templbl.backgroundColor = [UIColor ?????];

return templbl;

}

任何建议吗?谢谢。

7
我喜欢你在一个方法调用中使用了三种不同的变量命名方式。 - Matthias Bauch
5个回答

14
NSString *colorStr = @"magenta";

NSString *selectorString = [colorStr stringByAppendingString:@"Color"];
SEL selector = NSSelectorFromString(selectorString);
UIColor *color = [UIColor blackColor];
if ([UIColor respondsToSelector:selector]) {
    color = [UIColor performSelector:selector];
}

1
这是一个选择器 - Matthias Bauch

1
- (id) setLabel:(NSString *)text WithColorName:(NSString *)nameOfColor FontName:(NSString *)f_name FontSize:(float)f_size abel:(UILabel *)templbl color:(UIColor*) myLabelColor
{
  templbl.backgroundColor = myLabelColor;
  return templbl;
}

1
您可以动态调用颜色类的方法:
- (id) setLabel:(NSString *)text WithColorName:(NSString *)nameOfColor FontName:(NSString *)f_name FontSize:(float)f_size abel:(UILabel *)templbl
{

    SEL colorMethod = NSSelectorFromString([NSString stringWithFormat:@"%@Color", [nameOfColor lowercaseString]]);

    // Check if this is a valid color first
    if ([[UIColor class] respondsToSelector:colorMethod]) {

        // Dynamically invoke the class method
        UIColor *color = [[UIColor class] performSelector:colorMethod];
        templbl.backgroundColor = color;
    }

}

1

一种选项是使用字典,其中名称为键,颜色为值


你是不是真的想要将字符串“查找”选择器?如果是这样,NSSelectorFromString 就是你的好朋友。 - justin

0
Jhaliya的答案是可行的,实际上并不严格符合你的要求(在你的示例中,你不想将UIColor作为参数传递,而只想传递它的预设字符串名称)。
这有点棘手,因为像[UIColor redColor]这样的东西是方法,而不是字符串参数。你必须使用NSSelectorFromString来实现它。像Jhaliya的答案所示,最好传递一个UIColor。

但是这个方法返回带有某些属性的UILabel,并且我将其指定给另一个文件中的另一个标签,所以... - Maulik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接