我有自定义UITableViewCells的表格视图,可以在触摸时展开和收缩(显示信息)。不幸的是,取决于相互作用的位置,一些细胞分离器(在细胞框架的顶部/底部)消失。它使它们看起来好像两个单元格已经连接成一个。
以下是我认为相关的代码(如果需要更少/更多,请告诉我):
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DynamicTableViewCell *selectedCell = (DynamicTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
Trinomial *currentTri = [self.fetchedResultsController objectAtIndexPath:indexPath];
switch (currentTri.cellDetailActive) {
case YES:
selectedCell.detailLabel.hidden = YES;
[selectedCell setSelected:NO animated:YES];
currentTri.cellDetailActive = NO;
[tableView beginUpdates];
[tableView endUpdates];
break;
case NO:
selectedCell.detailLabel.hidden = NO;
[selectedCell setSelected:NO animated:YES];
currentTri.cellDetailActive = YES;
[tableView beginUpdates];
[tableView endUpdates];
break;
default:
NSLog(@"Serious application error. BOOLEAN contains no value in -[tableView:didSelectRowAtIndexPath:]");
break;
}
}
以下是设置行高的方法:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
Trinomial *tri = [self.fetchedResultsController objectAtIndexPath:indexPath];
if (!tri.cellDetailActive)
return 55;
else
return 110;
}
我的问题图片发布在下面。过程是单元格保存一个属性,告诉我是否显示详细信息,然后更改单元格高度(通过-[beginUpdates:]
和-[endUpdates:]
),然后隐藏或取消隐藏某些视图,具体取决于最后的显示模式。
如果我需要澄清/详述任何信息或提供任何其他材料,请告诉我。在此先感谢您的帮助!!
修改
不知何故,我将这个方法的两个版本合并在一起,其中有不正确的代码。 -[tableView:didSelectRowAtIndexPath:]
应该如何工作是收到的Core Data抓取结果控制器中有一个对象,其中包含一个名为cellDetailActive
的属性,用于检查单元格是否已扩展。我抱歉,单元格没有cellDetailActive属性。
编辑#2:
好的,我向Apple Bug Reporter(#17295019)提交了一个标题为&#34的错误;表格视图细胞分离器随着细胞高度的变化而消失"。好吧,这个标题有点误导,因为Apple的开发人员回到我身边并说因为-[setSelected:animated]
直接在一个表视图单元格上调用,所以我遇到了分隔符问题。相反,建议在我的switch语句中使用[tableView selectRowAtIndexPath:animated:scrollPosition]
以及[tableView deselectRowAtIndexPath:animated]
。
答案 0 :(得分:1)
我认为这只是一个错误。我解决它的方法是将分隔符设置为None并绘制我自己的单元格背景,其中包含一个用作分隔符的行。