所以我有一个加载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;
    }
}

最佳答案

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

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

要么

- (void)reloadData

如果您不介意重新加载所有单元的性能会受到影响。

关于ios - 将customTableCell中的 View 设置为在beginUpdate和endUpdate之后可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23550709/

10-12 14:43