NSIndexPath UITableViewCell subview? - PullRequest
       4

NSIndexPath UITableViewCell subview?

5 голосов
/ 07 декабря 2011

Есть ли какое-либо значение для получения NSIndexPath подпункта contentView UITableViewCell?

В моем случае у меня есть табличное представление, в котором каждая строка разбита на 3 кнопки.Я могу использовать тег кнопки, чтобы отслеживать, к какому столбцу это относится, но мне также нужно знать, к какой строке представления таблицы это подпредставление (когда пользователь нажимает кнопку).

Поскольку блоки кнопоквся фактическая строка табличного представления didSelectRowAtIndexPath никогда не вызывается (что ожидается), поэтому я не могу получить ее таким образом.

Я пробовал только [суперобзор thisButton], но, похоже, это не работает.Есть мысли?

Ответы [ 3 ]

19 голосов
/ 07 декабря 2011

Я предполагаю, что кнопка отправляет сообщение о событии UIControlEventTouchUpInside вашему контроллеру представления? Тогда вы могли бы сделать что-то вроде:

- (void)buttonPressed:(UIButton *)button
{
    CGPoint location = [button.superview convertPoint:button.center toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
    [self doSomethingWithRowAtIndexPath:indexPath];
}
2 голосов
/ 07 декабря 2011

Один из возможных вариантов - при создании ячейки для индексного пути вы можете присвоить тегу 3 * row_number + <the tag number>.затем просто разделите тег на 3, чтобы получить строку, и% 3, чтобы получить кнопку.

1 голос
/ 14 января 2015

Вам не нужно звонить button.superview. Вы можете перейти прямо из любого подпредставления в дереве прямо к табличному представлению

Objective-C

- (NSIndexPath *)indexPathForCellContainingView:(UIView *)view inTableView:(UITableView *)tableView {
    CGPoint viewCenterRelativeToTableview = [tableView convertPoint:CGPointMake(CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds)) fromView:view];
    NSIndexPath *cellIndexPath = [tableView indexPathForRowAtPoint:viewCenterRelativeToTableview];
    return cellIndexPath
}

Swift

func indexPathForCellContainingView(view: UIView, inTableView tableView:UITableView) -> NSIndexPath? {
    let viewCenterRelativeToTableview = tableView.convertPoint(CGPointMake(CGRectGetMidX(view.bounds), CGRectGetMidY(view.bounds)), fromView:view)
    return tableView.indexPathForRowAtPoint(viewCenterRelativeToTableview)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...