как я могу передать имя UIColor - PullRequest
3 голосов
/ 27 апреля 2011

Я хочу знать, как я могу передать имя UIColor определенному методу?

РЕДАКТИРОВАТЬ:

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

return templbl;

}

есть предложения?

Спасибо ..

Ответы [ 5 ]

14 голосов
/ 27 апреля 2011
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 голос
/ 27 апреля 2011

Вы можете динамически вызывать методы класса цвета:

- (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 голос
/ 27 апреля 2011

одна опция - это словарь, где имя является ключом, а цвет - значением

1 голос
/ 27 апреля 2011
- (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;
}
0 голосов
/ 27 апреля 2011

Ответ Jhaliya сработает, на самом деле это не совсем то, что вы просили (в вашем примере вы не хотите передавать UIColor в качестве параметра, вы просто хотите передать его предустановленное имя строки.

Это немного сложно, поскольку такие вещи, как [UIColor redColor], являются методами, а не строковыми параметрами. Вы должны будете использовать NSSelectorFromString, чтобы достичь этого. Намного лучше передать UIColor, как показывает ответ Джалии.

...