2011-07-12 26 views
0

私はivarアウトレットである2つのボタンがあるとします。 1つは「ブルー」と呼ばれ、もう1つは「レッド」と呼ばれます。今、私は "赤"の値を持つNSStringを持っています。 ifを使用せずに、NSStringによって識別されるボタンをselected状態に設定したいとします。動的ボタンの選択

私ははないがこれをやりたいん:

NSString *[email protected]"Red"; 
if ([button isEqualtoString:@"Blue") 
    self.blue.selected=YES; //self.blue and self.red are UIButtons 
else 
    self.red.selected=YES; 

次の2つのボタンを持っている場合、これは大丈夫ですが、私はそれよりもかなり多くのを持って、そしてそれを行うのは非常に洗練さと扱いにくいだろうこれは30個のボタンと同じです

UIButton ivarの名前をNSStringの値に直接リンクする方法を見つけるのはむしろ大変です。

答えて

6

文字列に小文字入れをして あなたはそのためKVCを使用することができます。

[self setValue:[NSNumber numberWithBool:YES] 
    forKeyPath:[NSString stringWithFormat:@"%@.selected", button]]; 
+0

それは素晴らしいです! –

+0

「YES」に設定されているボタンの 'selected'プロパティであることを具体的にどのように示しますか? – johnbakers

+0

@andrewjs:それは彼のキーパスで '.selected'が示すものです。 – Chuck

3

あなたは辞書にボタンを置くことができます。

[NSDictionaryName addObject: UIButtonName forKey: @"blue"]; 

またはそのような何か:

[NSDictionaryName objectForKey:@"blue"].selected = YES; 
+0

実際には、通常のメッセージパッシング構文を使用します。 '[[yourDict ionary objectForKey:@ "blue"] setSelected:YES] 'です。 'objectForKey:'はUIButtonを返すために静的に型付けされていないので、ここのドット構文は型エラーを引き起こします。 – Chuck

+0

私の悪い。私はそれを更新します。 –

+0

辞書の中のすべてのそれらの 'UIButton'オブジェクトをストーリー化することは痛みのタドでもありますが、これもクールです。私はヴィンスの他の答えが好きですが、まだそれを使う方法はまだ分かりません。どちらも参考になります。ありがとう。 – johnbakers