Как динамически добавлять кнопки вместе с прокруткой в ​​iPhone SDK? - PullRequest
0 голосов
/ 18 января 2011

В моем приложении для iPhone я должен динамически помещать кнопки вместе с scrollView.

Теперь мне нужно иметь события нажатия кнопки, связанные с каждой из кнопок, и выполнять определенное действие при каждом нажатии кнопки.

Мои кнопки имеют заголовок ASCII art.Поэтому создание общего IBAction и выполнение действия на основе заголовка кнопки в этом случае не будет простым вариантом.

Какие могут быть другие варианты?

Как связать событие нажатия кнопки сконкретная кнопка?

1 Ответ

0 голосов
/ 18 января 2011

Я думаю, что вы можете использовать tag свойство UIView.

Моя программа может выглядеть следующим образом.

- (NSInteger)encodeTagForButtonID:(NSString *)buttonID;
- (NSString *)decodeButtonIDFromEncodedTag:(NSInteger)tag;

Когда я создаю UIButton, я кодирую идентификатор кнопки в tag . buttonID может быть чем-то значимым, или это просто целое число, например, определенные значения. Подпись действия может быть такой: - (void) buttonAction: (id) отправитель; , и я могу получить значение tag из sender .

Edit:

Например, в методе источника данных UITableView.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *identifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
           /// new an autoreleased cell object
    }

    // Configure cell
    cell.tag = [self encodeTagWithIndexPath:indexPath];

    return cell;
}

Когда я касаюсь этой ячейки, я извлекаю indexPath из тега.

UIButton является подклассом UIView, поэтому он также имеет тег . Например, я создал собственный actionSheet, он содержит список UIButtons. Когда я нажимаю кнопку UIB, мне нужно знать, какую кнопку я нажал. Итак, я присваиваю информацию о строке тегу.

NSArray *buttonListInActionSheet = ....; ///< UIButton array, a button per row.
for (int idxBtn = 0; idxBtn < [buttonListInActionSheet count]; ++idxBtn) {
    UIButton *btn = [buttonListInActionSheet objectAtIndex:idxBtn];
    btn.tag = (100 + idxBtn);
}

Когда я касаюсь кнопки, я могу получить информацию о строке по

- (void)buttonTouched:(id)sender {
   UIButton *btn = (UIButton *)sender;
   NSInteger idxBtn = (btn.tag - 100);
}
...