1

IBAction から speechTime を渡し、0 までカウントダウンするタイマー アプリケーションを作成しました。5 つの異なる speechTimes と、スピーチ時間のカウントダウンを停止するトグル ボタンがあります。タイマーのカウントダウン中に IBAction が押されていないボタンを無効にできるようにしたいと思います (speechTime のリセットを防ぐため)。

現在、いくつかの [speechButton setEnable:NO] および [... setEnable:YES] 呼び出しがあり、それらはすべて期待どおりに機能します。しかし、メモリ管理が不十分で、非常に厄介なコードになっているのではないかと思います。すべてのボタンの NSSet のようなものを実装し、1 つのメソッドのみを使用してそれらを有効/無効にして、[ボタンを無効にする]/[ボタンを有効にする] になるようにしたいと思います。

私はこのようなもので遊んだ:

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

しかし、これはうまくいきません。任意の提案をいただければ幸いです!

4

3 に答える 3

1

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

于 2011-11-13T03:27:47.420 に答える
1

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

このを見てください。

于 2011-11-13T03:34:23.603 に答える
1

-enumarateObjectUsingBlock:そのような方法を使用するまで、ブロックについて納得できませんでした。

しかし、あなたのコードにとって、これはあなたの問題です

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

このように書き直します

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

*ここで不要なものを削除します。


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

于 2011-11-13T03:35:26.427 に答える