2011-07-19 6 views
1

Я пытаюсь выполнить петлю и запрограммировать сетку из 256 NSButtons (16x16). Код, который у меня есть, ниже. Это в Objective-C для моего Mac-приложения. Поэтому я регистрируюсь, чтобы узнать, какой тег я получаю, когда я нажимаю кнопку, но каждый раз возвращает один и тот же тег. Я хочу, чтобы каждая кнопка проходила 1-256 слева направо, сверху вниз. Этот код успешно заставляет их загружаться в мое представление, но теги ошибочны. Надеюсь, вы сможете помочь, спасибо.Петля для создания сетки NSButtons?

#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 определен в другом месте. Но вам нужно изменить btnPaintAction от:

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

Чтобы что-то вроде этого:

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

вызова setTag с приращением переменного

int TagVal = 1; 

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

Затем измените 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]; 

Таким образом, минус (-) вместо результатов в нумерации сверху вниз плюс (+).

Смежные вопросы