Подтвердить что ты не робот

Как получить индексную ячейку ячейки в UITableView при нажатии кнопки "Пользовательская аксессуар"?

У меня есть UITableView. В том, что я создал пользовательскую ячейку с кнопкой-аксессуаром. Теперь, нажав на кнопку аксессуара, я хочу создать другое представление с функциональностью редактирования ячейки. Для этого как я могу найти путь к указателю этой ячейки? я передаю значения этой ячейки?

Как вызвать следующий метод:

 - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
4b9b3361

Ответ 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" содержит подмножество или результаты поиска/фильтрации всех данных на основе критериев поиска/фильтра.