UItableview indexPathForCell - iOS6 'v' iOS7
Posted
技术标签:
【中文标题】UItableview indexPathForCell - iOS6 \'v\' iOS7【英文标题】:UItableview indexPathForCell - iOS6 'v' iOS7UItableview indexPathForCell - iOS6 'v' iOS7 【发布时间】:2013-10-09 20:44:14 【问题描述】:我创建了一个带有嵌入式分段控件的自定义 UItableviewcell,当单击分段控件时,我有一个需要行索引路径的方法。使用ios7以下运行良好,我得到了索引路径,然后可以更新自定义单元格中的其他值。
NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[[sender superview] superview] superview]];
不幸的是,当我使用 iOS6 进行测试时,indexPath 被设置为 NULL,现在 iOS6 和 iOS7 的工作方式有什么不同吗?
【问题讨论】:
【参考方案1】:做一些研究我没有这样做是最好的方法,而不是使用 superview 我现在搜索视图层次结构。
UIView *view = sender;
while (![view isKindOfClass:[UITableViewCell class]])
view = [view superview];
这现在适用于 iOS6 和 7,我遇到的另一个问题是分段控件的默认高度与 iOS7 不同并影响行高。
【讨论】:
我怀疑视图层次结构发生了变化。使用类似“3 个 superview 的视图是 TableViewCell”这样的逻辑不是很稳定。 搜索视图层次一般不是很稳定。如果发件人不在 UITableViewCell 中,您的代码也可能导致无限循环。【参考方案2】:您可以创建 UISegmentedControl 的子类并添加 indexPath 属性,然后只需在 cellForRowAtIndexPath 中设置 indexPath:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
SegmentCell *returnCell = [tableView dequeueReusableCellWithIdentifier:@"SegmentCell" forIndexPath:indexPath];
returnCell.segmentedControl.indexPath = indexPath;
return returnCell;
更简洁,如果视图层次结构发生变化,您的解决方案也不会中断。
【讨论】:
【参考方案3】:这是我认为最好的方式:
CGPoint subviewPosition = [sender convertPoint:CGPointZero toView:self.myTable];
NSIndexPath* indexPath = [self.myTable indexPathForRowAtPoint:subviewPosition];
不管是iOS6还是7,都会返回正确的索引路径
【讨论】:
【参考方案4】:这是因为在 iOS7 中 UITableViewWrapperView 是 UITableViewCell 的父视图,与 iOS6 不同
你应该使用
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
//iOS7
NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[[sender superview] superview] superview]];
else
//iOS6
NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[sender superview] superview]];
感谢 null (UITableViewCell indexPath crash in iOS7)
【讨论】:
以上是关于UItableview indexPathForCell - iOS6 'v' iOS7的主要内容,如果未能解决你的问题,请参考以下文章
UItableview 单元格的动态高度与 UItableview 单元格内的 UItableview
水平 UITableView 中的垂直 UITableView
如何与重叠显示的 UITableView 交互另一个 UITableView