NSIndexPath подпрограммы UITableViewCell?
Должен ли быть какой-нибудь доступ к NSIndexPath из под просмотрщика содержимого UITableViewCell?
В моем случае у меня есть табличный вид, в котором каждая строка разделена на 3 кнопки. Я могу использовать тег кнопки, чтобы следить за тем, какой столбец он есть, но мне также нужно знать, какая строка в представлении таблицы является подпунктом (когда пользователь нажимает кнопку).
Поскольку кнопка блокирует всю строку фактического представления таблицы, didSelectRowAtIndexPath никогда не вызывается (что ожидается), поэтому я не могу получить его таким образом.
Я попробовал только [thisButton superview], но это, похоже, не работает. Любые мысли?
Ответы
Ответ 1
Я предполагаю, что кнопка отправляет сообщение о событии 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
Один из возможных вариантов заключается в том, что при создании ячейки для указательного пути вы можете назначить тегу 3 * row_number + <the tag number>
. то просто разделите тег на 3, чтобы получить строку и% 3, чтобы получить кнопку.
Ответ 3
Вам не нужно вызывать 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)
}