UIButton внутри UITableViewController - PullRequest
       8

UIButton внутри UITableViewController

2 голосов
/ 28 октября 2009

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

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

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

Ответы [ 2 ]

2 голосов
/ 28 октября 2009

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

  • Предполагая, что это пользовательский класс ячейки, задайте свойство для экземпляра ячейки, чтобы определить, какую строку он отображает, и какую кнопку можно использовать позже.
  • Если вы помещаете эти кнопки в ячейки как их вспомогательные виды, взгляните на метод делегата таблицы tableView:accessoryButtonTappedForRowWithIndexPath:.
  • Если это таблица с одним разделом, вы могли бы сделать что-то действительно смешное, например сохранить индекс строки в свойстве tag кнопки. Ваш метод startVote: передается кнопке и может затем извлечь ее тег.
2 голосов
/ 28 октября 2009

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

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

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

EDIT:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...