UITableViewCell子视图的NSIndexPath?

有没有得到一个UITableViewCell的contentView子视图的NSIndexPath?

就我而言,我有一个表格视图,其中每一行被分成3个button。 我可以使用button标签来跟踪它是哪一列,但我也需要知道什么行视图是子视图(当用户点击button时)。

由于该button会阻止整个实际的表视图行,didSelectRowAtIndexPath从不会被调用(这是预期的),所以我不能这样做。

我曾尝试过[thisButton superview],但似乎没有工作。 有什么想法吗?

我假设button正在发送其UIControlEventTouchUpInside事件消息到您的视图控制器? 那么你可以做一些事情:

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

一种可能的select是在为索引path创build单元时,可以将标记分配为3 * row_number + <the tag number> 。 那么只需将标记除以3即可得到行和%3得到button。

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

迅速

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