我有一个带有Prototype Cells的TableViewController,如下所示:
我想在TableView数据加载时默认显示标题和日期标签。此外,当用户选择特定单元格时,我希望单元格可以扩展,以便用户可以读取描述标签的内容(可以在多行上运行)。
我查看了StackOverflow上的几个来源,包括以下内容:https://stackoverflow.com/a/3075493/4481169。
我查看的大部分资源都假设当未选择单元格时,它将返回到特定高度。但是,我的标题标签的文本在某些情况下可能占用多行,这意味着每个单元格将具有不同的初始行高度。
当用户选择展开的特定单元格以显示所有三个标签时,如何取消选择该单元格,单元格将恢复到原始高度?
答案 0 :(得分:1)
实现这一目标的最简单方法可能是拥有2个单元格原型:
@"NotSelectedCell"
@"SelectedCell"
此外,您需要存储所选单元格的indexPath
,所以:
@implementation InformationTableViewController {
NSIndexPath* selectedCellIndexPath;
}
在tableView委托方法tableView:cellForRowAtIndexPath:
中,您需要根据indexPath在NotSelectedCell
和SelectedCell
之间切换:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([indexPath isEqual:selectedCellIndexPath]) {
NSString* cellIdentifier = @"SelectedCell";
InformationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifier forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (cell == nil) {
cell = [[InformationTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
cell.accessoryType = UITableViewCellAccessoryNone;
}
cell.title = // title
cell.date = // date
cell.description = // description
return cell;
}
else {
NSString* cellIdentifier = @"NotSelectedCell";
InformationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifier forIndexPath:indexPath];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (cell == nil) {
cell = [[InformationTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
cell.accessoryType = UITableViewCellAccessoryNone;
}
cell.title = // title
cell.date = // date
return cell;
}
}
每次用户选择新单元格并重新加载tableView时,您必须保存新的indexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
selectedCellIndexPath = [indexPath copy];
[self.tableView reloadData];
}
为了在重新加载之前恢复tableView的滚动位置,您必须执行以下操作:
CGFloat tableViewContentHeight = self.tableView.contentSize.height;
[self.tableView reloadData];
CGFloat newTableViewContentHeight = self.tableView.contentSize.height;
self.tableView.contentOffset = CGPointMake(0, newTableViewContentHeight - tableViewContentHeight);
答案 1 :(得分:0)
根据您的要求,我建议您执行此步骤
在此之后,您可以填写didselectrowatindex的委托方法 该描述的价值并重新加载。
因此它将填充说明中的文字并将高度作为 需要