将customTableCell中的视图设置为在beginUpdate和endUpdate之后可见

时间:2014-05-08 19:21:16

标签: ios objective-c uitableview

所以我有一个加载customTableCells的TableView。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier1 = @"ReviewTableCell";
    reviewCell = [self.reviewTableView dequeueReusableCellWithIdentifier:CellIdentifier1];

    if (reviewCell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ReviewTableCell" owner:self options:nil];
        reviewCell = [nib objectAtIndex:0];
        [reviewCell.replyButton addTarget:self action:@selector(reply:) forControlEvents:UIControlEventTouchUpInside]; <----- note! reply button function
    }

    reviewCell.replyButton.tag = indexPath.row;

    if ([[_isExpandList objectAtIndex:indexPath.row]isEqual:@1])
    {
        [reviewCell.postView setHidden:NO];
    }
    else if ([[_isExpandList objectAtIndex:indexPath.row]isEqual:@0])
    {
        [reviewCell.postView setHidden:YES];
    }
    return reviewCell;
}

正如您在customTableCell上看到的,有一个按钮具有以下功能:

- (void)reply:(UIButton *)sender {

    BOOL isExpand = [_isExpandList[sender.tag] boolValue];
    [_isExpandList replaceObjectAtIndex:sender.tag withObject:@(!isExpand)];

    if ([[_isExpandList objectAtIndex:sender.tag]isEqual:@1])
    {
        [self.reviewTableView beginUpdates];
        [reviewCell.postView setHidden:NO];
        [self.reviewTableView endUpdates];
    }
    else
    {
        [self.reviewTableView beginUpdates];
        [reviewCell.postView setHidden:YES];
        [self.reviewTableView endUpdates];
    }
}

当用户按下按钮时,发件人单元格将“展开”(高度将延伸)并且将显示review.postView。但是,单元格只会展开,但直到我向下滚动并向上滚动才会显示postView。这可能是因为然后重新加载了单元格。如何在按下按钮后立即显示postView。

_isExpandList只是一个数组,用于跟踪哪个单元格已展开,哪些单元格未展开。我在ViewDidLoad中使用以下代码启动了它:

_isExpandList = [[NSMutableArray alloc] init];
for (int i = 0; i < 5; i++) {
    [_isExpandList addObject:@NO];
}

我将包含cellHeight函数以防万一,但我不认为它是相关的。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([[_isExpandList objectAtIndex:indexPath.row]isEqual:@0])
    {
        return 100;
    }
    else{
        return  300;
    }
}

1 个答案:

答案 0 :(得分:1)

您需要使用以下命令显式重新加载tableview单元格:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

- (void)reloadData

如果您不介意重新加载所有单元格的性能损失。