如何增加所选单元格的行高?

时间:2016-03-27 06:30:01

标签: ios uitableview

我有一个带有Prototype Cells的TableViewController,如下所示: enter image description here

我想在TableView数据加载时默认显示标题和日期标签。此外,当用户选择特定单元格时,我希望单元格可以扩展,以便用户可以读取描述标签的内容(可以在多行上运行)。

我查看了StackOverflow上的几个来源,包括以下内容:https://stackoverflow.com/a/3075493/4481169

我查看的大部分资源都假设当未选择单元格时,它将返回到特定高度。但是,我的标题标签的文本在某些情况下可能占用多行,这意味着每个单元格将具有不同的初始行高度。

当用户选择展开的特定单元格以显示所有三个标签时,如何取消选择该单元格,单元格将恢复到原始高度?

2 个答案:

答案 0 :(得分:1)

实现这一目标的最简单方法可能是拥有2个单元格原型:

  1. 未选中:2 UILabels; //让我们使用ID:@"NotSelectedCell"
  2. 选中:全部3个UILabels; // @"SelectedCell"
  3. 此外,您需要存储所选单元格的indexPath,所以:

    @implementation InformationTableViewController {
        NSIndexPath* selectedCellIndexPath;
    }
    

    在tableView委托方法tableView:cellForRowAtIndexPath:中,您需要根据indexPath在NotSelectedCellSelectedCell之间切换:

    - (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的委托方法 该描述的价值并重新加载。

  • 因此它将填充说明中的文字并将高度作为 需要