2

我创建了一个带有嵌入式分段控件的自定义 UItableviewcell,当单击分段控件时,我有一个需要行索引路径的方法。使用 iOS7 以下运行良好,我获得了索引路径,然后可以更新自定义单元格中的其他值。

    NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[[sender superview] superview] superview]];

不幸的是,当我使用 iOS6 进行测试时,indexPath 被设置为 NULL,现在这对 iOS6 和 iOS7 的工作方式有什么不同吗?

4

4 回答 4

1

做了一些研究,我没有这样做是最好的方法,而不是使用超级视图,我现在搜索视图层次结构。

UIView *view = sender;
while (![view isKindOfClass:[UITableViewCell class]]) {
    view = [view superview];
}

这现在适用于 iOS6 和 7,我遇到的另一个问题是分段控件的默认高度与 iOS7 不同并影响行高。

于 2013-10-09T20:56:15.143 回答
0

您可以创建 UISegmentedControl 的子类并添加 indexPath 属性,然后只需在 cellForRowAtIndexPath 中设置 indexPath:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    SegmentCell *returnCell = [tableView dequeueReusableCellWithIdentifier:@"SegmentCell" forIndexPath:indexPath];
    returnCell.segmentedControl.indexPath = indexPath;

    return returnCell;
}

更干净,如果视图层次结构发生变化,您的解决方案不会中断。

于 2013-10-09T21:09:24.913 回答
0

这是我认为最好的方式:

CGPoint subviewPosition = [sender convertPoint:CGPointZero toView:self.myTable];

NSIndexPath* indexPath = [self.myTable indexPathForRowAtPoint:subviewPosition];

不管是iOS6还是7,都会返回正确的索引路径

于 2014-04-09T06:38:39.370 回答
-1

这是因为在 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(iOS7 中的 UITableViewCell indexPath 崩溃

于 2013-11-20T08:41:53.793 回答