如何在IOS中动态调用类方法?

时间:2012-11-15 06:31:16

标签: iphone objective-c ios ipad uicolor

我在UIColor中遇到了问题。

我将从

等网络服务中获取颜色名称
  

红色,蓝色,洋红色.......等等。

如何使用此设置视图的backgroundColor。

我只能找到带有这些颜色名称的类方法([UIColor redColor], [UIColor blueColor], [UIColor magentaColor]),但是我无法编写以编程方式调用这些方法的代码,因为我得到的颜色名称是动态的。

PLease帮助.....

谢谢。

3 个答案:

答案 0 :(得分:8)

这样的事情应该有效:

NSString *colorFromWeb = @"Red"; // for example
NSString *selectorName = [NSString stringWithFormat:@"%@Color", [colorFromWeb lowercaseString]];
SEL selector = NSSelectorFromString(selectorName);

if ([UIColor respondsToSelector:selector])
    UIColor *color = [UIColor performSelector:selector]; // Equivalent to [UIColor redColor];

答案 1 :(得分:3)

在这里你可以遵循两种方法。

1)。您可以通过传递这些即将到来的颜色的名称来调用color方法。

正如Scott在他的答案中解释的那样。

  NSString *colorFromWeb = @"Red"; // for example
  NSString *selectorName = [NSString stringWithFormat:@"%@Color", [colorFromWeb lowercaseString]];
  SEL selector = NSSelectorFromString(selectorName);

  if ([UIColor respondsToSelector:selector])
  UIColor *color = [UIColor performSelector:selector]; // Equivalent to [UIColor redColor];

2)。在上面,您可能会遇到一些麻烦,假设您有一些color名称形式WebService UIColor Class中不存在RGB float在这种情况下,您无法获得理想的颜色,或者您的应用可能会崩溃等。 在这里,我建议您应该从Webservice Provider询问RGB值。通过这种方式,您可以轻松传递这些Color,并可以使用这些RGB [UIColor colorWithRed:redRGB green:greenRGB blue:blueRGB alpha:1.0]; }

这是一些演示。

redRGB

您只需从WebService获取greenRGBblueRGBCrash即可。 在这里你可以'面对任何{{1}}。

我希望它可能会清除给你。

答案 2 :(得分:1)

键值编码机制允许您使用属性名称的字符串表示与类的属性进行交互。

NSString* colorString = @"redColor";
UIColor* color = [UIColor valueForKey:colorString];