一次只扩展“一个”单元格?目前我可以打开多个

时间:2012-05-15 09:32:10

标签: iphone ios ios5 uitableview

我跟随Simon Lee的tutorial关于动画uitableview高度变化,它的工作令人惊叹!我似乎面临的唯一问题是我可以点击几个单元格,无论另一个单元格是否已经扩展,它们都将保持扩展。我只希望在任何给定时间扩展一个,如果另一个已经扩展,则在新扩展之前关闭它。

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

2 个答案:

答案 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: -