如果它已经扩展,我试图让细胞崩溃。此代码在单击时展开行,但bool cell.cell_expanded
在heightForRowAtIndexPath
中始终为FALSE。我已经尝试了[tableView reloadData]
但是没有做到这一点。有什么想法吗?
我读到使用heightForRowAtIndexPath
会对性能产生巨大影响,所以如果可能的话,我想删除此方法调用。是否有可能在其他地方重构此功能?
这就是我所拥有的:
CustomCell.h
@interface CustomCell : UITableViewCell
{
UIImageView *cell_arrow;
BOOL cell_expanded;
}
@property (nonatomic, strong) UIImageView *cell_arrow;
@property (nonatomic) BOOL cell_expanded;
FirstViewController.m
-(void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
selectedCellIndexPath = indexPath;
CustomCell *cell = (CustomCell *)[tv cellForRowAtIndexPath:indexPath];
NSString *arrow = nil;
if (cell.cell_expanded == TRUE) {
arrow = @"arrow_down.png";
cell.cell_expanded = FALSE;
}
else {
arrow = @"arrow_up.png";
cell.cell_expanded = TRUE;
}
cell.cell_arrow.image = [UIImage imageNamed:arrow];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
-(CGFloat)tableView:(UITableView *)tv heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell = (CustomCell *)[self tableView:tableView cellForRowAtIndexPath:indexPath];
if (selectedCellIndexPath != nil) {
if (indexPath.row == selectedCellIndexPath.row) {
NSLog(@"cell_expanded = %d for row %i", cell.cell_expanded, indexPath.row);
CGSize theSize = [cell.cell_body.text sizeWithFont:[UIFont systemFontOfSize:12.0f] constrainedToSize:CGSizeMake(265.0f, 9999.0f) lineBreakMode:UILineBreakModeWordWrap];
if (cell.cell_expanded == TRUE) {
NSLog(@"open it");
return theSize.height + 16;
} else {
NSLog(@"close it");
return 44;
}
}
else {
return 44;
}
}
return 44;
}
答案 0 :(得分:-1)
好的,这里有几件事:
1)只需调用-reloadData而不是-end / beginUpdates。 2)你显然不明白UITableView是如何工作的。 UITableView重用其单元格。这意味着你可能有5个单元格实例。您应该阅读documents有关它的内容。要解决您的问题,您应该将扩展变量保存在UITableView表示的实例变量中。