UITableView单元最初正确加载但随后更改

时间:2009-04-07 00:16:18

标签: iphone objective-c cocoa cocoa-touch

以下方法将数组中的数据加载到UITableView的自定义单元格中。数据正确加载。但是,当我向下滚动上面单元格中的数据时(单元格不可见)会变为数组中看似随机的元素。

- (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 个答案:

答案 0 :(得分:1)

您正在使用缓存单元格,可能性是您没有在loadFullComments中正确重置单元格的子视图元素。

答案 1 :(得分:1)

Elfred有正确的想法。使用

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

方法调用,您需要确保每次在该单元格上设置任何子视图/属性,如标签,图像,文本等。您不能假设您将获得没有内容的“新鲜”单元格。

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

答案 2 :(得分:0)

我将UITextView更改为多行UILabel,现在一切正常。我不确定为什么这会有所作为 - 但是嘿它有效:)