2014-03-19 34 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财产。

我还没有试过这些,但我想这应该工作。