UITableViewCell子视图的NSIndexPath?

时间:2011-12-07 00:30:17

标签: objective-c ios uitableview uibutton

是否有人获得UITableViewCell的contentView子视图的NSIndexPath?

在我的情况下,我有一个表视图,其中每行被分成3个按钮。我可以使用按钮标记来跟踪它是哪一列,但我还需要知道表视图的哪一行是(当用户点击按钮时)的子视图。

因为按钮会阻塞整个实际的表视图行,所以从不调用didSelectRowAtIndexPath(这是预期的),所以我无法这样做。

我曾尝试过[thisButton superview],但这似乎不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:19)

我认为该按钮正在向您的视图控制器发送其UIControlEventTouchUpInside事件消息?然后你可以做类似的事情:

- (void)buttonPressed:(UIButton *)button
{
    CGPoint location = [button.superview convertPoint:button.center toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
    [self doSomethingWithRowAtIndexPath:indexPath];
}

答案 1 :(得分:2)

一种可能的选择是,在为索引路径创建单元格时,您可以将标记指定为3 * row_number + <the tag number>。然后将标记除以3得到行,使用%3得到按钮。

答案 2 :(得分:1)

您无需致电button.superview。您可以直接从树中的任何子视图直接进入表格视图

目标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
}

夫特

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)
}