Как да добавя динамично бутони заедно с изгледа за превъртане в iPhone SDK?

В моето приложение за iPhone трябва да поставя бутони динамично заедно със scrollView.

Сега трябва да имам събития за щракване върху бутон, свързани с всеки от бутоните, и да изпълнявам конкретно действие при всяко щракване върху бутон.

Моите бутони имат заглавие, което е ASCII изкуство. Така че създаването на общо IBAction и извършването на действие въз основа на заглавието на бутона няма да бъде лесна опция в този случай.

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

Как мога да свържа събитието за натискане на бутон с конкретния бутон?


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


Отговори (1)


Мисля, че можете да използвате свойството 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
comment
Благодаря ви за приноса. Не съм много наясно как да използвам етикет. Можете ли да разясните малко повече за етикета и как да го използвате. - person Parth Bhatt; 18.01.2011