2012-05-15 230 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

我剛剛把你的代碼在問題中給出的例子,並檢查它在做什麼,它在做什麼 –

相關問題