2014-03-19 35 views
0

我通過擴大我的手機:如何取消展開擴展的UITableView單元格?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if(selectedRow && indexPath.row == selectedRow.row) { 
     tableView.scrollEnabled = NO; 
     return 480; 
    } 
    return 250; 
} 

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

    selectedRow = indexPath; 
    [tableView beginUpdates]; 
    [tableView endUpdates]; 

    CGFloat height = 250.0f;//cell height 
    tableView.contentInset = UIEdgeInsetsMake(0, 0, height * indexPath.row, 0); 

    [tableView setContentOffset:CGPointMake(0, (indexPath.row * height))animated:YES]; 

} 

它正常工作,每當我選擇一個單元格,它做的膨脹,但我無法弄清楚如何把它恢復到原來的高度。有什麼想法嗎?

+1

嘗試'reloadRowsAtIndexPaths:'和'selectedRow = nil'。順便說一句,你想把它恢復到原來的高度? – Akhilrajtr

回答

1

試試這個

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if(selectedRow && indexPath.row == selectedRow.row) { 
     tableView.scrollEnabled = NO; 
     return 480; 
    } 
    tableView.scrollEnabled = YES; 
    return 250; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGFloat height = 250.0f; 
    if (selectedRow && indexPath.row == selectedRow.row) { 
     NSIndexPath *index = [NSIndexPath indexPathForRow:selectedRow.row inSection:selectedRow.section]; 
     selectedRow = nil; 
     [tableView reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationNone]; 

     tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); 
     [tableView setContentOffset:CGPointMake(0, 0)animated:NO]; 

    } else { 
     selectedRow = indexPath; 
     [tableView beginUpdates]; 
     [tableView endUpdates]; 

     tableView.contentInset = UIEdgeInsetsMake(0, 0, height * indexPath.row, 0); 
     [tableView setContentOffset:CGPointMake(0, (indexPath.row * height))animated:NO]; 
    } 

} 
+0

感謝您的回答!工作得很好,順便編輯我的問題,我添加了插入和偏移的代碼。所以當我點擊一個單元格時,它將會處於最高位置。工作正常,當我沒有展開它時,我怎樣才能將它恢復到原來的位置? –

+0

您可以在if語句中執行縮小單元格的操作,以及在else部分內部擴展單元格的操作。 –

+0

是的,它工作正常(擴大和縮小現在工作正常)。每次我選擇一個單元格時,我都會先展開它,然後再展開它。所以當它來自底部時,當我縮小它時,它始終保持在頂部。我想要的是把它恢復到原來的位置。你能幫我嗎?謝謝 –

1

試試這個:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{  
     if(selectedRow.row == indexPath.row) 
       selectedRow = nil; 
     else 
       selectedRow = indexPath; 
     [tableView beginUpdates]; 
     [tableView endUpdates]; 

     [tableView reloadData]; 
} 
+0

感謝您的回答!工作得很好,順便編輯我的問題,我添加了插入和偏移的代碼。所以當我點擊一個單元格時,它將會處於最高位置。工作正常,當我沒有展開它時,我怎樣才能將它恢復到原來的位置? –

0

我建議你在你的tableView數據源對象添加自定義屬性像isExpanded和交換機基於選擇該屬性,並根據該值返回的高度。

例如:在你的heightForRowAtIndexPath方法中,你可能有這樣的東西。

if(yourCustomCell.isExpanded == true){ 
    return 480; 
} 
else{ 
    return 250; 
} 

didSelectRowAtIndexPath方法,只需設置或取消設置此屬性。

yourCustomCell.isExpanded = !yourCustomCell.isExpanded 
[tableView reloadData]; //Which will call heightForRow and then assign new height based on the property value. 

現在,如果你沒有一個自定義單元格對象,那麼我認爲你可以利用細胞的isSelected財產。

我還沒有試過這些,但我想這應該工作。