是否有人获得UITableViewCell的contentView子视图的NSIndexPath?
在我的情况下,我有一个表视图,其中每行被分成3个按钮。我可以使用按钮标记来跟踪它是哪一列,但我还需要知道表视图的哪一行是(当用户点击按钮时)的子视图。
因为按钮会阻塞整个实际的表视图行,所以从不调用didSelectRowAtIndexPath(这是预期的),所以我无法这样做。
我曾尝试过[thisButton superview],但这似乎不起作用。有什么想法吗?
答案 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。您可以直接从树中的任何子视图直接进入表格视图
- (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)
}