2011-11-13 1 views
1

私はIBActionからspeechTimeを渡し、0にカウントするタイマーアプリケーションを作成しました。5つの異なるspeechTimesと、音声時間カウントダウンを停止するトグルボタンがあります。タイマーがカウントダウンしている間にIBActionが押されていないボタンを無効にすることができます(speechTimeのリセットを防ぐため)。目的C - NSSetを使用してsetEnabled:NOをNSButtonのセットに使用できますか?

私は現在、いくつかの[speechButton setEnable:NO]と[... setEnable:YES]コールを持っています。私はそれが貧しいメモリ管理だと思うとのために実際に厄介な探しているコードを作る。私はすべてのボタンのNSSetのようなものを実装したいと思いますし、[button disable]/[buttons enable]で終わるように1つのメソッドだけを有効/無効にします。

TimerViewController.h

... 
@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]; 
    } 

は、しかし、これは動作しません

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

TimerViewController.m:

は、私はこのようなもので遊ん。任意の提案をいただければ幸いです!

答えて

1

この状況で定義されているIBOutletCollectionをご覧ください。

これをご覧ください。example

+0

すごくいいですね。 –

+0

これは本当に良い提案です!残念ながら、iOS4はこれを実装しましたが、明らかにMac OS X開発用にまだ実装されていません。 http://stackoverflow.com/questions/4820804/looking-for-a-way-to-use-an-nsarray-as-an-outlet-for-a-bunch-of-buttons/4820925#4820925 – cecilgol

1

NSSetのドキュメントの-enumerateObjectsUsingBlock:を参照してください。

1

私はNSResponderが-enumarateObjectUsingBlock:をチェックすることに同意します。私はそのような方法を使用するまで、私はブロックについて納得していませんでした。

しかし、あなたのコードのために、これはここでは必要とされていない* Reomoveこの

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

と同じように書き換え

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

あなたの問題です。


私はあなたがあなたのinitメソッドのbla blaのセクションで作成されていると仮定しています。
IBOutletの場合、このコードはinitメソッドに属しません。

関連する問題