Вопрос

У меня есть UIButton который создается внутри каждой ячейки таблицы.Я хочу подключить сенсорное событие следующим образом:

[imageButton addTarget:self
                action:@selector(startVote:)
      forControlEvents:UIControlEventTouchUpInside];

Я хочу передать данные о текущей строке (идентификатор объекта для этой строки) в метод startVote.Есть ли метод, которого мне не хватает для этого, или я нарушаю какие-то рекомендации?Это кажется вполне нормальным поступком?

Это было полезно?

Решение

Я предполагаю, что у вас есть какой-то NSArray с данными, которые передаются на кнопки в cellForRowAtIndexPath.

Попробуйте это в startVote:

- (void)startVote:(id)sender {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSDictionary *myData = [myArray objectAtIndex:indexPath.row];
}

Редактировать:

Если по какой-либо причине строка не выбрана, вы можете назначить уникальную tag к каждой кнопке при создании, а затем:

- (void)startVote:(id)sender {
    int myTag = [(UIButton *)sender tag];
    NSDictionary *myData = [myArray objectAtIndex:myTag];
}

Может быть, вы бы проделали какую-нибудь операцию с tag таким образом, его можно использовать как индекс (я добавляю определенную сумму к каждому tag таким образом, это не будет конфликтовать с "автоматической" маркировкой, используемой операционной системой.

Другие советы

Тот Самый UITableViewCell из коробки не знает, какую строку он отображает в таблице.Помните, что цель состоит в том, чтобы одни и те же экземпляры ячеек повторно использовались по всей таблице для отображения ее данных.Тем не менее, ваш UITableViewController отвечает за настройку ячеек и передачу их в систему (и, конечно, имеет путь к индексу).В этот момент вы могли бы сделать что-то вроде:

  • Предполагая, что это пользовательский класс cell, установите свойство для экземпляра cell, чтобы определить, какую строку он отображает и которую ваша кнопка может использовать позже.
  • Если вы размещаете эти кнопки в ячейках в качестве дополнительных представлений, взгляните на делегат таблицы tableView:accessoryButtonTappedForRowWithIndexPath: способ.
  • Если это таблица из одного раздела, вы могли бы сделать что-то действительно дрянное, например сохранить индекс строки в кнопке tag собственность.Ваш startVote: методу передается кнопка, и он затем может извлечь ее тег.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top