2012-05-15 309 views
0

我跟随西蒙李的tutorial动画uitableview高度变化,它的工作令人惊叹!我似乎面临的唯一问题是我可以挖掘几个单元,并且无论另一个单元是否已经扩展,它们都将保持展开状态。我只希望在任何时候扩展一个,如果另一个已经扩展,在新扩展之前要关闭它。一次只展开“一个”单元格吗?目前我可以打开多个

Simon提到我们应该“将单个NSIndexPath存储为当前选定项目而不是索引数组”。我不确定如何做到这一点。如果任何人都可以帮忙,那真是太棒了!

回答

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]]; 
    } 
} 

编码快乐:) 享受一天!

+0

你真棒你的答案更容易处理,而无需重新编码整个过程!在放大的单元格中放置工具栏时,我也遇到了另一个问题。当单元格未展开时,我试过所有隐藏它,然后在扩展时允许用户交互。我为此创建了一个全新的问题,再次感谢! [这是问题](http://stackoverflow.com/questions/10616932/enabling-disabling-ui-toolbar-in-expanded-cell) – Year3000

0

是的,你可以使用的UITableView的委托方法COLAPSE细胞 - (空)的tableView:(UITableView的*)的tableView didSelectRowAtIndexPath方法:(NSIndexPath *)indexPath和 - (CGFloat的)的tableView:(UITableView的*)的tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath: -

首先声明的变量获得theindexPath

NSIndexPath *selectedCellIndexPath; 

然后让细胞的indexPath在didSelectRowAtIndexPath方法: -

-(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也: -

+0

这也给出了相同的结果,但与一些锯齿动画即蓝色选定的行正在被压在新出现的行下。但与我的它显示顺利的动画也动态按需动画,即根据单元格的位置,它显示动画的行向上或向下 –

+0

如果您已经开发了一个自定义单元格,您在layoutsubviews [super layoutSubviews]中设置; \t \t CGRect contentRect = self.contentView.bounds; ? –

+0

我刚刚把你的代码在问题中给出的例子,并检查它在做什么,它在做什么 –

相关问题