我跟随Simon Lee的tutorial关于动画uitableview高度变化,它的工作令人惊叹!我似乎面临的唯一问题是我可以点击几个单元格,无论另一个单元格是否已经扩展,它们都将保持扩展。我只希望在任何给定时间扩展一个,如果另一个已经扩展,则在新扩展之前关闭它。
Simon提到我们应该“将一个NSIndexPath存储为当前所选项目,而不是存储在索引数组中。”我不确定如何做到这一点。如果有人能提供帮助那就太棒了!
答案 0 :(得分: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]];
}
}
快乐编码:) 享受这一天!!
答案 1 :(得分:0)
是的,您可以使用UITableView的委托方法来处理单元格 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath和 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath * )indexPath: -
首先声明变量以获取theindexPath
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;
}
你也可以看到这个tutorial: -