手风琴表格单元格 - 用于展开和折叠ios

时间:2013-09-04 07:20:14

标签: ios uitableview expand collapse

我正在尝试以手风琴单元格模式展开/折叠tableview单元格。因此,当用户点击该行时,他们将通过扩展行高来获得单元格中所选行的详细描述。我有2个数组,'array'和'detailarray',用于在'cell.textLabel.text'和'cell.detailTextLabel.text'单元格中显示它。现在我最初将'cell.detailTextLabel.hidden = YES'视为隐藏,这样当用户点击该行时,可以获得该单元格的扩展文本。

我的代码,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...
    cell.textLabel.text=[array objectAtIndex:indexPath.row];
    cell.detailTextLabel.text=[detailarray objectAtIndex:indexPath.row];
    cell.detailTextLabel.hidden = YES;

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath  *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    NSLog(@"indexpath is %d", indexPath.row);
    selectedIndex = indexPath.row;
    isSearching = YES;

    [self.tableview beginUpdates];

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.textLabel.text=[array objectAtIndex:indexPath.row];
    cell.detailTextLabel.text=[detailarray objectAtIndex:indexPath.row];
    cell.detailTextLabel.hidden = NO;

    [self.tableview endUpdates];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (isSearching && indexPath.row == selectedIndex)
    {       
        return 77;      
    }
    return 44;    
}

现在我创建了一个包含4行的tableviewcell,当点击每一行时,我将获得所选行的扩展视图。 在运行期间,当我的单元格延伸时,我可以在单元格上看到“细节”文本,但是当didselectRowAtIndexPath函数停止时它会消失,为什么会这样,所以任何人都可以在这方面帮助我。

2 个答案:

答案 0 :(得分:3)

查看SubTable,它会为您处理展开/折叠。

如果您正在寻找要在主要单元格下显示的单个细节单元格,您可以像这样实现委托方法:

- (NSInteger)numberOfChildCellsUnderParentIndex:(NSInteger)parentIndex {
    if (detailarray[parentIndex] contains content)
        return 1;
    else
        return 0;
}

并自定义单元格的高度并满足您的需求

答案 1 :(得分:0)

选择单元格后,请记住selectedIndex属性中的索引(必须创建一个)。

向表格视图添加功能:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return indexPath.row == selectedIndex ? extendedHeight : normalHeight;
}

选择单元格后,不要忘记重新加载tableView。