2011-07-19 14 views
1

私はループスルーし、256個のNSButtons(16x16)のグリッドをプログラムで作成しようとしています。私がこれまでに持っているコードは以下の通りです。これは私のMacアプリケーションのObjective-Cにあります。だから、私はボタンをクリックしたときにどのタグを取得するのかを確認するためにロギングしていますが、毎回同じタグを返すようにしています。私はすべてのボタンが左から右、上から下へ1-256進むようにしたい。このコードは正常に私のビューにロードされますが、タグは間違っています。あなたが助けてくれることを祈って、感謝します。NSButtonのグリッドを作成するループ?

int TagVal = 1; 

for (int j = 0; j < N_ROWS; j++) { 
    .... 
    [paintPixel setTag:TagVal++]; 
    .... 
} 

変数の増分と

#define N_ROWS 16 
    #define N_COLS 16 
    int btnSpaceDifference = 1; 
    int btnSpacing = N_ROWS + btnSpaceDifference; 

    for (int j = 0; j < N_ROWS; j++) { 

     for (int i = 0; i < N_COLS; i++) { 
      paintPixel = [[[NSButton alloc] initWithFrame:NSMakeRect(10 + (i * btnSpacing), 10 + (j * btnSpacing), 16, 16)] autorelease]; 
      [paintPixel setTitle:@""]; 
      [paintPixel setBezelStyle:NSBorderlessWindowMask]; 
      [paintPixel setTag:j + i * N_ROWS + 1]; 
      [paintPixel setAction:@selector(btnPaintAction:)]; 
      [[[box.tabViewItems objectAtIndex:0]view] addSubview:paintPixel]; 
     } 
    } 

-(void)btnPaintAction:(id)sender{ 
    NSLog(@"%ld", paintPixel.tag); 
} 

答えて

1

そのコンパイルは、あなたが他の場所で定義されたpaintPixelがある可能性がありますかわかりません。このようなものに

-(void)btnPaintAction:(id)sender { 
    NSLog(@"%ld", paintPixel.tag); 
} 

:しかし、あなたはあなたからbtnPaintActionを変更する必要が

-(void)btnPaintAction:(id)sender { 
    NSButton * myButton = (NSButton *) sender; 
    NSLog(@"%ld", myButton.tag); 
} 
1

コールsetTagは、その後、あなたのbtnPaintActionを変更します。

UIButton *button = (UIButton *)sender; 
NSLog(@"%ld", button.tag); 
+1

バマー、18分で受け入れられた回答を破ってもまだ十分ではありませんでした – KevinDTimm

4

代わりに、これらのボタンの全てを自分作るのは、なぜNSMatrixを使用していませんか?これは、が完全のようなものです。

1

あなたの行動があなたの(明らかに)メンバ変数paintPixelを参照しているため、毎回同じタグを返しています。代わりにアクションにsenderパラメータを使用してください。

NSLog(@"%ld", ((NSButton *)sender).tag); 
0

これは古い投稿ですが、私は正解がないので、私の追加があります。

Q.「すべてのボタンが左から右、上から下に1-256になるようにしたい」

ケビンしかしもう一つの変更が必要とされ、良好なトラックにあった:

paintPixel = [[[NSButton alloc] initWithFrame:NSMakeRect(10 + (i * btnSpacing), 10 - (j * btnSpacing), 16, 16)] autorelease]; 

従ってマイナス( - )の代わりにプラス(+)上から下に番号付けにおける結果。

関連する問題