2011-07-12 67 views
0

假设我有两个按钮是伊娃的插座。一个叫做“蓝色”,另一个叫“红色”。现在,我有一个NSString,其值为“Red”。我想将由NSString标识的按钮设置为selected状态,而不使用if动态按钮选择

我做要做到这一点:

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

这是好的,如果你有两个按钮,但我有相当多的多的是,而且这将是非常不雅和繁琐做这就像30个按钮。

我宁愿找一种方法直接链接UIButton伊娃的名称与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

我的不好。我会更新它。 – 2011-07-12 18:50:37

+0

这也很酷,虽然故事中的所有'UIButton'对象都会带来一些痛苦。我喜欢文斯的其他答案,但仍不太清楚如何使用它。两者都有帮助谢谢。 – johnbakers