0

我按照 Simon Lee 的动画 uitableview 高度变化教程进行操作,效果非常好!我似乎面临的唯一问题是我可以点击几个单元格,并且无论另一个单元格是否已经展开,它们都将保持展开状态。我只希望在任何给定时间扩展一个,如果另一个已经扩展,则在新扩展之前将其关闭。

Simon 提到我们应该“将单个 NSIndexPath 存储为当前选定项,而不是存储在索引数组中”。我不完全确定如何做到这一点。如果有人能帮忙,那就太棒了!

4

2 回答 2

1

你所要做的就是在下面的 tableView 委托方法中添加下面的tableView:didSelectRowAtIndexPath:代码

[selectedIndexes setObject:selectedIndex forKey:indexPath]; 

要添加的代码

NSArray *key = selectedIndexes.allKeys;
for (int i = 0; i < [key count]; i++) {
    if (![[key objectAtIndex:i] isEqual:indexPath]) {
        [selectedIndexes setObject:[NSNumber numberWithBool:NO] forKey:[key objectAtIndex:i]];
    }
}

快乐编码 :) 享受这一天!

于 2012-05-15T10:16:04.910 回答
0

是的,您可以使用 UITableView -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 和 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 的委托方法折叠单元格: -

首先声明变量获取indexPath

NSIndexPath *selectedCellIndexPath;

然后在 didSelectRowAtIndexPath 中获取单元格的 indexPath :-

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
            selectedCellIndexPath=indexPath;

    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationBottom];
}

然后进行折叠和延伸并设置上下高度:-

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{  
            if(selectedCellIndexPath != nil  
       && [selectedCellIndexPath compare:indexPath] == NSOrderedSame)  
        return yourCellsExtendedHeightInInteger;  

    return yourCellsCollapsedHeightInInteger;  
}  

或使用

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

您还可以查看本教程:-

于 2012-05-15T10:13:51.057 回答