UIButton внутри UITableViewController
-
08-07-2019 - |
Вопрос
У меня есть 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:
методу передается кнопка, и он затем может извлечь ее тег.