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

Posted

技术标签:

【中文标题】从其超级视图 iOS 7 问题中获取 UITableViewCell【英文标题】:Getting UITableViewCell from its superview iOS 7 issue 【发布时间】:2013-09-30 17:48:34 【问题描述】:

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

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

对于 iOS 6,它返回 UITableViewCell

对于 iOS 7,它返回 UITableViewCellScrollView

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

我应该把这些行放在哪里? cellForRowAtIndexPath 中的第一个和 didSelectRowAtIndexPath 中的第二个? 我明白了。所有行都在同一个地方,我曾经有 [[[sender view] superview]superview];【参考方案2】:

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

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

【讨论】:

【参考方案3】:
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];

【讨论】:

以上是关于从其超级视图 iOS 7 问题中获取 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 和 7 上的视图框架不同

使用 iOS 7 ***布局指南

滚动视图在 iOS 7 中运行良好,但在 iOS6 中出现问题

NSLayoutConstraint layout Margin 从 iOS 7 到 iOS 8 的变化

UITableViewCell 自动高度问题

IOS:在 IOS 中禁用超级视图的滚动