Обработка действий из прототипа UITableViewCell

У меня есть прототип UITableViewCell с тремя кнопками, которые я назову button1, button2 и button3.

Скажем, например, я загружаю массив из 2 элементов в свой UITableView, поэтому 2 экземпляра этого прототипа UITableViewCell, каждый с 3 кнопками; как мне обрабатывать действия этих кнопок и определять, какая кнопка была нажата в какой строке.

Вот скриншот прототипа ячейки, который я использую.

ОБНОВЛЕНИЕ

Используя приведенный ниже код, строка всегда равна 0... Есть идеи?

ParentDashboardChildTableViewCell *cell = (ParentDashboardChildTableViewCell *)[sender superview].superview;
    NSIndexPath *indexPath = [self.overviewTableView indexPathForCell:cell];
    NSLog(@"selected tableview row is %ld", (long)indexPath.row);

person nickjf89    schedule 03.03.2015    source источник


Ответы (2)


Вы можете использовать тег для каждой из этих кнопок. Для справки

Назначьте значения тегов для трех кнопок в ячейке таблицы. Вы можете присвоить значения тега в формате, например: 00,01,02, чтобы o относился к номеру строки, а 1,2,3 относился к кнопкам.

      NSString *tagString_for_Button1=[NSString stringwithformat:@"%d%d"indexPath.row,1];
         NSString *tagString_for_Button2=[NSString stringwithformat:@"%d%d"indexPath.row,2];
            NSString *tagString_for_Button3=[NSString stringwithformat:@"%d%d"indexPath.row,3];
        cell.yourbutton1.tag = [tagString_for_Button1 integerValue];
         cell.yourbutton2.tag = [tagString_for_Button2 integerValue];                    
           cell.yourbutton3.tag = [tagString_for_Button3 integerValue];

и добавьте целевое действие к вашим кнопкам, как показано ниже:

    [cell.yourbutton1 addTarget:self action:@selector(yourButtonClicked1:) forControlEvents:UIControlEventTouchUpInside];
    [cell.yourbutton2 addTarget:self action:@selector(yourButtonClicked2:) forControlEvents:UIControlEventTouchUpInside];
    [cell.yourbutton3 addTarget:self action:@selector(yourButtonClicked3:) forControlEvents:UIControlEventTouchUpInside];

 and define the methods for those buttons based on index as follows:
     -(void)yourButtonClicked:(UIButton*)sender
   {
 if (sender.tag == 0) 
 {
 //Here your coding.

 }
 }
person Teja Nandamuri    schedule 03.03.2015
comment
пометка номера ячейки является статической, мне нужно динамическое решение. - person nickjf89; 07.03.2015
comment
что ты имеешь в виду динамический - person Teja Nandamuri; 07.03.2015
comment
вы упомянули пометить кнопки в зависимости от строки и кнопки. Мне нужно, чтобы номера строк были динамическими - может быть 1, может быть 50. так что это не сработает - person nickjf89; 07.03.2015
comment
говоря, что ваше решение может быть динамическим, я полагаю - неважно. даст этому идти. Благодарность - person nickjf89; 07.03.2015

Предположим, вы определили целевое действие вашей кнопки для метода с именем «actionCellButtonClicked», тогда вы можете реализовать такой метод

-(IBAction)actionCellButtonClicked:(id)sender {
    CustomCollectionCell *cell = (CustomCollectionCell *) [sender superview];
    NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];
    // to do somthing
 }

Примечание. [Sender superview] позволяет просматривать иерархию представлений, содержащую ваши кнопки. Другими словами, вы получаете ячейку, а затем можете получить индекс ячейки. Я использовал collectionView, но есть аналогичный метод для табличного представления.

person chiarotto.alessandro    schedule 03.03.2015
comment
Спасибо за ответ. Я попытался реализовать это, используя обновленный код в моем вопросе, но строка всегда равна 0... Есть идеи? - person nickjf89; 03.03.2015
comment
Если значение NSIndexPath.row всегда равно 0, попробуйте зарегистрировать ячейку, чтобы проверить, получаете ли вы другую ячейку. Если вы получаете другую ячейку (другой идентификатор), попробуйте реализовать этот метод uitable: tableView:heightForRowAtIndexPath и убедитесь, что ваша пользовательская ячейка соответствует значению, возвращаемому вышеуказанным методом. - person chiarotto.alessandro; 04.03.2015