3

我在单元格中有几个 UI 对象有手势识别器实例。我需要获取按压对象所在的单元格。我有下面的方法来获取它,但它只在 iOS 7 之前工作:

UITableViewCell *cell = (UITableViewCell *)[[[sender view] superview]superview];

对于 iOS 6,它返回UITableViewCell

对于 iOS 7,它返回UITableViewCellScrollView

我认为新单元格在 iOS 7 中有一些额外的视图,这就是为什么我抓取UITableViewCellScrollView而不是UITableViewCell像以前那样。

4

3 回答 3

10

从子视图中获取表格视图单元格的最佳方法是将子视图的位置转换为表格视图中的位置,然后向表格视图询问该单元格的索引路径:

CGPoint subviewPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath* indexPath = [self.tableView indexPathForRowAtPoint:subviewPosition];

然后,您可以获得该索引路径的单元格:

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];
于 2013-09-30T17:52:09.880 回答
3

如您所见,依赖视图层次结构并不是一个好方法——Apple 可以随时打破它。

您应该使用委托协议将您的单元连接到控制器。

于 2013-09-30T17:51:54.417 回答
2
CGPoint subviewPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath* indexPath = [self.tableView indexPathForRowAtPoint:subviewPosition];
UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];
NSIndexPath *path=[self.tableView indexPathForCell:cell];
于 2014-01-15T16:09:13.403 回答