Как получить индексную ячейку ячейки в UITableView при нажатии кнопки "Пользовательская аксессуар"?
У меня есть UITableView. В том, что я создал пользовательскую ячейку с кнопкой-аксессуаром. Теперь, нажав на кнопку аксессуара, я хочу создать другое представление с функциональностью редактирования ячейки. Для этого как я могу найти путь к указателю этой ячейки? я передаю значения этой ячейки?
Как вызвать следующий метод:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
Ответы
Ответ 1
Прежде всего, обратите внимание, что когда вы используете пользовательский аксессуар в ячейке, метод tableView: accessoryButtonTappedForRowWithIndexPath: delegate не будет вызываться. Вы должны добавить какую-то цель/действие к кнопке, которую вы добавляете в качестве пользовательского аксессуара, и самостоятельно обрабатывать действие касания. Вы должны добавить пользовательский аксессуар примерно так,
UIButton *accessory = ...;
[accessory addTarget:self action:@selector(onCustomAccessoryTapped:) forControlEvents:UIControlEventTouchUpInside];
...
cell.accessoryView = accessory;
И в методе onCustomAccessoryTapped: вам нужно получить такой путь указателя,
- (void)onCustomAccessoryTapped:(UIButton *)sender {
UITableViewCell *cell = (UITableViewCell *)sender.superview;
NSIndexPath *indexPath = [tableView indexPathForCell:cell];
// Now you can do the following
[self tableView:tableView accessoryButtonTappedForRowWithIndexPath:indexPath];
// Or you can do something else here to handle the action
}
Ответ 2
Указатель indexPath передается в качестве второго параметра для метода.
Ответ 3
Использование "indexPathForCell" работает, как указано emptystack
[yourViewController.tableView indexPathForCell: cell];
Кроме того, если вы используете tableview и Search View, в вашем контроллере обязательно используйте searchDisplayController
NSIndexPath *indexPath;
NSDictionary *campaignMember;
if(self.searchDisplayController.isActive) {
indexPath = [[self.searchDisplayController searchResultsTableView] indexPathForCell: cell];
campaignMember = [self.filterResults objectAtIndex:indexPath.row];
} else {
indexPath = [self.tableView indexPathForCell: cell];
campaignMember = [self.dataRows objectAtIndex:indexPath.row];
}
NSString *id = [campaignMember objectForKey:@"Id"];
В моем случае "campaignMember" - это объект person, и мне нужно получить его идентификатор. "self.dataRows" - это массив, содержащий основные данные таблицы, где "self.filterResults" содержит подмножество или результаты поиска/фильтрации всех данных на основе критериев поиска/фильтра.