Мисля, че можете да използвате свойството tag на UIView.
Моята програма може да бъде следната.
- (NSInteger)encodeTagForButtonID:(NSString *)buttonID;
- (NSString *)decodeButtonIDFromEncodedTag:(NSInteger)tag;
Когато създавам UIButton, кодирам идентификатора на бутона за маркиране. 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, така че също има tag. Например, направих персонализиран 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