Я думаю, что вы можете использовать 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);
}