我有一个自定义单元格,其中一个标签可以更大,足以添加“查看更多”按钮。因此,我将标签的内容切换为5行,然后添加此按钮以扩展内容(如果需要)。
我的问题是:这可以在不使用tableView的reloadData的情况下完成吗?
我在“查看更多”按钮的触摸事件(自定义单元格内)中尝试了此代码:
self.contentView.frame = self.backgroundView.frame = self.accessoryView.frame = CGRectMake(0, 0, self.contentView.frame.size.width, self.contentView.frame.size.height + 80);
什么都没发生!我想我需要一种方法来扩展单元格行高度,以及表格视图的内容高度。
提前致谢,
版本:我在链接ios - Expand table view cell like Twitter app中检查了解决方案,我已将此代码应用于自定义单元格(触摸事件):
self.contentExpanded = YES;
UITableView *tableView = [self parentTableView];
NSIndexPath *indexPath = [tableView indexPathForCell:self];
[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
我现在有2个问题: 1)reloadRowsAtIndexPaths正在执行整个reloadData。 2)自定义单元格是知道单元格高度的单元格。访问此方法时,self.contentExpanded始终等于NO。
***方法parentTableView取自Reference to the parent tableView of a cell
第2版:我不认为问题出在heightForRow上。我无法避免为所有细胞调用此方法...
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *) indexPath
{
CellObject *object;
if(self.searchTableData)
object = [self.searchTableData objectAtIndex:indexPath.row];
else
object = [self.database.cellObjectsFetchedResultsController objectAtIndexPath:indexPath];
id cell = [TableViewCellFactory createFromCellObject:object fromPrototypeTable:self.tableView];
CGFloat height = [cell getHeightRowForCellObject:object];
return height;
}
在自定义单元格中:
- (CGFloat)getHeightRowForCellObject:(CellObject *)cellObject
{
CGFloat messageHeight = 0;
if (![cellObject.content isEqualToString:@""])
{
UILabel *tempMessageLabel = [[UILabel alloc] init];
tempMessageLabel.font = [UIFont systemFontOfSize:14];
tempMessageLabel.autoresizingMask = (UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin );
tempMessageLabel.numberOfLines = 5;
tempMessageLabel.text = cellObject.content;
[tempMessageLabel sizeToFit];
CGFloat lineHeight = [tempMessageLabel.text sizeWithFont:tempMessageLabel.font].height;
CGSize size = [tempMessageLabel.text sizeWithFont:tempMessageLabel.font
constrainedToSize:CGSizeMake(280, lineHeight * tempMessageLabel.numberOfLines)
lineBreakMode:UILineBreakModeWordWrap];
messageHeight = size.height;
if(self.contentExpanded)
messageHeight += 100;
}
return messageHeight;
}