UITableViewCell子视图的NSIndexPath?

Posted

技术标签:

【中文标题】UITableViewCell子视图的NSIndexPath?【英文标题】:NSIndexPath of UITableViewCell subview? 【发布时间】:2011-12-07 00:30:17 【问题描述】:

有没有办法获取 UITableViewCell 的 contentView 子视图的 NSIndexPath?

就我而言,我有一个表格视图,其中每一行都分为 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];

【讨论】:

这个答案实际上比我想要的更多,更优雅。 如果您选择这样做,也不受插入/删除/重新排列行的影响。 嗯.. 它似乎不适用于我的第三列按钮。它正在正确转换触摸位置,但在 indexPathForRowAtPoint 上,它为第三列中的每个按钮返回 0(尽管适用于前两列)。会不会和风景有关系? 对不起,我从错误的坐标空间转换。因为我使用的是按钮center,所以我应该从它的superview 坐标空间进行转换。我已经更新了代码 sn-p。【参考方案2】:

一个可能的选项是在为索引路径制作单元格时,您可以将标签指定为3 * row_number + <the tag number>。然后将标签除以 3 得到行,%3 得到按钮。

【讨论】:

【参考方案3】:

你不需要调用 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)

【讨论】:

以上是关于UITableViewCell子视图的NSIndexPath?的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell子视图的NSIndexPath?

UITableViewCell 的子视图不能是圆形的

iOS UITableViewCell 发布子视图

检测 UITableViewCell 子视图内的触摸

自动调整子类 UITableViewCell 子视图的大小

为啥我必须删除为 UITableViewCell 添加的子视图,而不是在 UITableViewCell 的子类中?