1

私はここで問題に悩まされていUIColorます。

次のようなWebサービスから色の名前を取得します

赤、青、マゼンタ.......など。

これを使用してビューのbackgroundColorを設定するにはどうすればよいですか。

これらの色の名前()を持つクラスメソッドしか見つけることが[UIColor redColor], [UIColor blueColor], [UIColor magentaColor]できませんが、プログラムでこれらのメソッドを呼び出すコードを記述できません。取得した色の名前は動的です。

助けてください.....

ありがとうございました。

4

3 に答える 3

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];
于 2012-11-15T06:39:51.950 に答える
3

ここでは、2つのアプローチに従うことができます。

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名前を取得した場合、問題が発生する可能性があります。その場合、目的の色を取得できないか、アプリがクラッシュする可能性があります 。あなたからの値を尋ねてください。このようにして、あなたはこれらを簡単に渡すことができ、これらで作ることができますWebServiceUIColor ClassRGB floatWebservice ProviderRGBColorRGB

これがいくつかのデモです。

 [UIColor colorWithRed:redRGB green:greenRGB blue:blueRGB alpha:1.0];

redRGBgreenRGBおよびblueRGBWebServiceから取得する必要があり ます。これであなたはどんなに直面することができますCrash

私はそれがあなたにクリアされるかもしれないことを望みます。

于 2012-11-15T06:46:12.393 に答える
1

Key Valueコーディングメカニズムを使用すると、プロパティ名の文字列表現を使用してクラスのプロパティを操作できます。

NSString* colorString = @"redColor";
UIColor* color = [UIColor valueForKey:colorString];
于 2012-11-15T06:39:34.550 に答える