代码之家  ›  专栏  ›  技术社区  ›  zpesk

UITableView单元格最初正确加载,但随后发生更改

  •  1
  • zpesk  · 技术社区  · 15 年前

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        cellComments=nil;
        cellComments=(FullCommentCell *)[tableView dequeueReusableCellWithIdentifier:FullCommentCell_ID];
        if(cellComments==nil)
        {
            [[NSBundle mainBundle]loadNibNamed:@"FullCommentCell" owner:self options:nil];
        }
        NSString *row = [NSString stringWithFormat:@"#%i",indexPath.row+1];
        [cellComments loadFullComments:[latestFMLComments objectAtIndex:(indexPath.row+1)] withCommentNumber:row];
        //cellComments.userInteractionEnabled=NO;
        return cellComments;
    }
    

    我还有下面的方法,可以在单击单元格时进行处理。当一个单元格的数据更改为数组中的某个随机元素时——如果我单击该单元格(调用下面的方法),该单元格中的数据将更改为正确的数据。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [self tableView:tableView cellForRowAtIndexPath:indexPath];
    }
    

    3 回复  |  直到 15 年前
        1
  •  1
  •   Elfred    15 年前

    如果您使用的是缓存单元格,则可能是您没有在loadFullComments中正确重置单元格的subvview元素。

        2
  •  1
  •   Craig Otis    15 年前

    艾尔弗雷德的想法是对的。当使用

    cellComments=(FullCommentCell *)[tableView dequeueReusableCellWithIdentifier:FullCommentCell_ID];
    

    方法调用时,需要确保每次都在该单元格上设置任何子视图/属性,如标签、图像、文本等。你不能假设你会得到一个没有内容的“新鲜”细胞。

    例如,当在索引17处显示单元格时,表视图可能会将以前在索引3处的可重用单元格出列。此单元格将具有与在索引3中时相同的属性,您有责任重置这些属性。(例如,将文本从“我是3号牢房”更改为“我是17号牢房”。)

        3
  •  0
  •   zpesk    15 年前

    我将UITextView更改为多行UILabel,现在一切正常。我不知道为什么这会有不同,但嘿,这是有效的:)