Лучший способ построить 10x10 сетку UIButtons? - PullRequest
6 голосов
/ 01 августа 2009

У меня будет 10x10 сетка объектов UIButton. На каждый из этих UIB-кнопок будет ссылаться номер строки и столбца, поэтому они, вероятно, должны храниться в каком-либо массиве.

Мой вопрос: Какой самый простой способ создать эту сетку? Программно или через Интерфейсный Разработчик? Если программно, какой самый простой способ получить доступ к этим кнопкам, чтобы при их нажатии я мог узнать номер строки и столбца кнопки, к которой прикоснулись?

Ответы [ 2 ]

13 голосов
/ 01 августа 2009

Мне лично не нравится IB, поэтому я рекомендую делать это программно!

Используйте NSArray для хранения ваших UIButton's. Индекс каждой кнопки row*COLUMNS+column.

Установите для свойства тега значение BASE + index (BASE - произвольное значение> 0), чтобы можно было найти позицию кнопки: index=tag-BASE; row=index/COLUMNS; column=index%COLUMNS;

- (void)loadView {
    [super loadView];

    for (NSInteger row = 0; row < ROWS; row++) {
        for (NSInteger col = 0; col < COLS; col++) {
            UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            [buttonArray addObject:button];
            button.tag = BASE + row * COLS + col;
            button.frame = ...;
            [button addTarget:self action:@selector(didPushButton:) forControlEvents:UIControlEventTouchDown];
            [self.view addSubview:button];
        }
    }
}

- (void)didPushButton:(id)sender {
    UIButton *button = (UIButton *)sender;
    NSInteger index = button.tag - BASE;
    NSInteger row = index / COLS;
    NSInteger col = index % COLS;
    // ...
}
8 голосов
/ 01 августа 2009

Вы можете использовать GridView из библиотеки moriarty , чтобы помочь с layout - позиционированием каждой кнопки там, где вы хотите. Построение частично на примере кода squelart как метода createButtonAtRow: col: это может работать следующим образом:

GridView* gridview = [[GridView alloc] initWithRows:ROWS cols:COLS];
for (NSInteger row = 0; row < ROWS; ++row) {
  for (NSInteger col = 0; col < COLS; ++col) {
    [gridView addsubView:[self createButtonAtRow:row col:col]];
  }
}
[myView addSubview:gridView];
[gridView release];  // Let myView retain gridView.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...