UITableView:如何在单击按钮时动态更改单元格高度?

时间:2015-04-10 15:54:02

标签: ios uitableview autolayout layoutsubviews

我有一个UITableView,其中每个单元格都有一个按钮 单击该按钮时,将更改单元格的高度 当然,整个桌面高度将根据它改变 在漫长的冲浪中我找不到方法。 实现这一目标的优雅解决方案是什么?

2 个答案:

答案 0 :(得分:1)

调用函数- reloadRowsAtIndexPaths:withRowAnimation:。实现函数UITableViewDelegate函数- tableView:heightForRowAtIndexPath:并返回新的高度。

答案 1 :(得分:1)

(请参阅this回答。感谢Tapas Pal撰写原始答案。我只是将其更改为更适合您的问题。)

您需要一个BOOL变量来告诉单元格其高度应与其他单元格不同。您还需要一个数字(这里,我将使用NSInteger)变量,以便您可以增加正确单元格的高度。

BOOL shouldCellBeExpanded = NO;
NSInteger indexOfExpandedCell = -1;

然后,在您的-tableView:cellForRowAtIndexPath:方法中,将以下内容添加到您设计单元格的位置。您将按钮标记设置为与其单元格的行相同,以便您知道要扩展的单元格。此外,如果您需要向单元格添加任何元素,您可以在if语句中执行此操作。

[[cell aButton] setTag:[indexPath row]];

if(shouldCellBeExpanded && [indexPath row] == indexOfExpandedCell)
{
   // design your read more label here
}

转到按钮的IBAction。点击按钮后,UITableView将重新加载按钮所在的单元格。 注意:如果您在UITableView中使用多个部分,则需要添加另一个数字变量来说明这一点。如果您需要帮助,请发表评论。

-(IBAction) aButtonTapped:(id)sender
{
    UIButton *aButton = (UIButton *)sender;
    indexOfExpandedCell = [aButton tag];
    shouldCellBeExpanded = YES;

    [[self tableView] beginUpdates];
    [[self tableView] reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem: indexOfExpandedCell inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
    [[self tableView] endUpdates];
}

最后,在-tableView:heightForRowAtIndexPath:方法中:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(shouldCellBeExpanded && [indexPath row] == indexOfExpandedCell)
        return 200.0f; //Your desired height for the expanded cell
    else
        return 100.0f; //The other cells' height
}

这样做是检查是否要扩展单元格,如果是,则检查该单元格是否是当前要求高度值的单元格。如果是,则返回的值是展开的高度。如果没有,原来的那个。