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?的主要内容,如果未能解决你的问题,请参考以下文章