在tableView:heightForRowAtIndexPath中获取UITableViewCell选择状态:

时间:2014-05-07 12:47:53

标签: ios objective-c uitableview

我想在选择UITableViewCell时更改cellPrototypes的高度,因为我对选定和未选定的单元格使用了不同的UITableView。 单元格位于UIView中,嵌入indexPath,这是TableView的委托和数据源。 但是当我尝试检查- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { CGFloat cellHeight = 64; if ([tableView cellForRowAtIndexPath:indexPath].selected) { cellHeight = 128; return cellHeight; } 处的单元格是否被选中时,我显然会产生无限递归。

{{1}}

你能帮我找一个有效的解决方案吗?

2 个答案:

答案 0 :(得分:0)

尝试在didSelectRowAtIndexPath方法上重新加载tableView。

答案 1 :(得分:0)

你做的是错误的,因为你调用cellForRowAtIndexPath导致tableView调用heightForRowAtIndexPath,所以你有无限递归。

实现所需目标的最佳选择是使对象保存所选单元格的索引路径以使其更宽

1)首先有一个全局变量,称之为NSIndexPath currentSelectedCellIndex
2)在cellDidSelectCellAtIndexPath中更改变量并按如下方式重新加载单元格

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     currentSelectedCellIndex = indexPath;
     [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}

3)最后在heightForRowAtIndexPath中返回所选单元格的新高度

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
      if(indexPath.row == currentSelectedCellIndex.row) {
         // for example 60
         return 60;
       }
       return 44;
}