目标C - 我可以使用NSSet来设置一个NSButton的setEnabled:NO吗?

时间:2011-11-13 03:22:52

标签: objective-c nsbutton nsset

我编写了一个计时器应用程序,它从IBAction传递一个speechTime并向下计数到0.有五个不同的speechTimes,以及一个停止语音时间倒计时的切换按钮。我希望能够在计时器倒计时时禁用不按下IBAction的按钮(以防止重置speechTime)。

我目前有几个[speechButton setEnable:NO]和[... setEnable:YES]调用,它们都按我期望的方式工作;但我怀疑这是糟糕的内存管理,并使真的令人讨厌的代码。我想实现类似所有按钮的NSSet之类的东西,并且仅使用一种方法启用/禁用它们,以便我最终使用[按钮禁用] / [按钮启用]。

我玩过这样的事情:

TimerViewController.h

@implement TimerViewController{
NSButton *buttonA, *buttonB, *buttonC; 
}
@property (retain, readonly) NSSet *hijackableButtons;
-(void)disableButtons
@end

TimerViewController.m

...
@synthesize hijackableButtons;
-(void)init{
//blah blah blah
hijackableButtons = [NSSet setWithObjects:*buttonA,*buttonB,*buttonC,nil];
}
//...

-(void)disableButtons{
for (id buttons in hijackableButtons){
    if (buttons isKindOfClass:[NSButton class]){
        [buttons setEnabled:NO];
    }

但这不起作用。任何建议将不胜感激!

3 个答案:

答案 0 :(得分:1)

请参阅-enumerateObjectsUsingBlock:文档中的NSSet

答案 1 :(得分:1)

查看为此情况定义的IBOutletCollection

看看这个example

答案 2 :(得分:1)

我同意NSResponder检查-enumarateObjectUsingBlock:我没有说服Block,直到我使用类似的方法。

但对于您的代码,这是您的问题

hijackableButtons = [NSSet setWithObjects:*buttonA,*buttonB,*buttonC,nil];

像这样重写它

hijackableButtons = [NSSet setWithObjects:buttonA, buttonB, buttonC, nil];

重新停止此处不需要的*


我假设您是在init方法的bla bla部分创建的 如果它们是IBOutlet,则此代码不属于您的init方法。