从超级视图iOS 7问题中获取UITableViewCell

时间:2013-09-30 17:48:35

标签: ios uitableview ios7 uigesturerecognizer

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

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

对于iOS 6,它返回UITableViewCell

对于iOS 7,它返回UITableViewCellScrollView

我认为新手机在iOS 7中有一些额外的观点,这就是为什么我像以前一样抓住UITableViewCellScrollView而不是UITableViewCell

3 个答案:

答案 0 :(得分:10)

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

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

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

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];

答案 1 :(得分:3)

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

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

答案 2 :(得分: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];