Как динамически добавлять кнопки вместе с прокруткой в ​​​​iPhone SDK?

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

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

У моих кнопок есть название, которое является искусством ASCII. Таким образом, создание общего IBAction и выполнение действия на основе названия кнопки в этом случае не будет простым вариантом.

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

Как я могу связать событие нажатия кнопки с определенной кнопкой?


person Parth Bhatt    schedule 18.01.2011    source источник


Ответы (1)


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

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

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

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

Изменить:

Например, в методе источника данных 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. Когда я нажимаю кнопку UIButton, мне нужно знать, какую кнопку я нажал. Итак, я назначаю информацию о строке тегу.

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);
}
person AechoLiu    schedule 18.01.2011
comment
Спасибо за ваш вклад. Я не очень понимаю, как использовать тег. Не могли бы вы подробнее рассказать о теге и о том, как его использовать. - person Parth Bhatt; 18.01.2011