2012-03-19 11 views
0

IBOutletCollectionを宣言しようとしています。 私がしたいことは、複数のボタンを1つ1つずつ宣言する必要がない方法で複数のボタンを管理することです。構文エラー:IBOutletCollection

type name requires a specifier or qualifier 

expected ; at end of declaration 

そして、私はその理由を理解していない:

#import <Foundation/Foundation.h> 

@interface WindowManager : NSObject 
{ 
    @private 
    IBOutlet NSTextField* textField; 
    IBOutletCollection (NSButton) NSArray* buttonsArray; 
} 

@property (nonatomic , retain) IBOutletCollection (NSButton) NSArray *buttonsArray; 

- (void) awakeFromNib; 

@end 

は、私はこれらのエラーを取得します。 .xibファイルがロードされると、NSArrayのすべてのボタンが管理できるようになります。ボタンが押されるたびに、どのボタンが押されたのかを知りたいと思います。 それは可能でしょうか?問題は、私はiPhoneのガイドだけを見つけることです、私はiPhoneのガイドでこのコードに似た例が見つかりました、このことが働いていると言います。

+0

IBOutletCollectionは、iOSでのみ使用できます。 –

答えて

1

私の代わりにIBActionを使用することをお勧めします:

-(IBAction)button_Clicked:(id)sender; 

理由は、押されたボタンがプレスイベントの「送信者」であるということです。このようにして、実際にどのボタンが押されたのかを常に知ることができます。あなたがアクションを使用するためのコントロールの任意の番号を割り当てることができます

-(IBAction)button_Clicked:(id)sender { 
    switch([sender tag]) { 
     case 1: 
      // do stuff 
      break; 
     //etc..... 
     default: 
      break; 
    } 
} 

:あなたはそれがさらに識別できるようにしたい場合は、あなたの実装ファイルは、次のようになりますように、あなたは、ボタンは「タグ」プロパティを設定することができます。私はこれが役立つことを願っています

+0

問題があります:この方法で試してもコードは機能しません。 デバッグのために、NSLogで送信者タグを印刷しようとしましたが、nullです。なぜですか? –

+0

あなたのインターフェイスファイル(.h)に ' - (IBAction)button_Clicked:(id)sender;が正しく宣言されていますか?次に、実際のメソッドを実装ファイル(.m)で宣言しておく必要があります。一度それを行うと、すべてのボタンを.xibファイルのメソッドに接続する必要があります。 'tag'プロパティは' NSInteger'であり、送信者が 'NSButton'型でなく、' tag'プロパティがなく、nil idオブジェクトを返さない限り、nullになるべきではありません。 –