我创建了一个带有嵌入式分段控件的自定义UItableviewcell,当单击分段控件时,我有一个需要行索引路径的方法。使用iOS7,以下工作正常,我获得索引路径,然后可以更新自定义单元格中的其他值。
NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[[sender superview] superview] superview]];
不幸的是,当我使用iOS6对其进行测试时,indexPath被设置为NULL,现在它对iOS6和iOS的工作方式有所不同。 iOS7?
答案 0 :(得分:1)
做了一些研究后我没有这样做是最好的方法,而不是使用superview我现在搜索视图层次结构。
UIView *view = sender;
while (![view isKindOfClass:[UITableViewCell class]]) {
view = [view superview];
}
这适用于iOS6和iPad。 7,我遇到的另一个问题是分段控件的默认高度对于iOS7是不同的,并且会影响行的高度。
答案 1 :(得分: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;
}
更清洁,如果视图层次结构发生变化,您的解决方案就不会中断。
答案 2 :(得分:0)
这是我认为最好的方式:
CGPoint subviewPosition = [sender convertPoint:CGPointZero toView:self.myTable];
NSIndexPath * indexPath = [self.myTable indexPathForRowAtPoint:subviewPosition];
无论是iOS6还是7,它都会返回正确的索引路径
答案 3 :(得分:-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]];
}