簡體   English   中英

如何擴展UITableView單元?

[英]How to Unexpand an expanded UITableView Cell?

我通過以下方式擴展我的細胞:

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

}

它工作正常,每當我選擇一個單元格時,它確實會擴展,但我無法弄清楚如何將其恢復到原始高度。 有什么想法嗎?

嘗試這個 :

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

        [tableView reloadData];   
}

嘗試這個

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

}

我建議你在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屬性。

我沒試過這些,但我想這應該有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM