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