UITableView中的自定义绘图在5个单元格后失败

时间:2010-11-08 08:56:43

标签: iphone uitableview view

我在UITableView中绘制自定义视图时遇到了问题。我的自定义视图的drawRect函数名为ChatBubbleView,它只是绘制一个常量大小的矩形。

我在ChatBubbleView的drawRect函数中有一个NSLog调试语句。前5次我向UITableView添加一个单元格,一切都很好,我看到NSLog语句触发器。然而,在5之后,绘图变得乱码,我不再看到调试声明。

我完全不知所措,我很感激您提供的任何帮助。提前谢谢!

这是在UITableView上调用reloadData时调用的函数。

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (forumMode) {
    //This part works, ignore   

    } else {

        ChatBubbleView* chatBubble = nil;

        if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
                                       reuseIdentifier:CellIdentifier] autorelease];

            // Add the bubble
            chatBubble = [[[ChatBubbleView alloc] init] autorelease];
            chatBubble.tag = BUBBLEVIEW_TAG;
            [cell.contentView addSubview:chatBubble];

        } else {        

            // Reuse old views        
            chatBubble = (ChatBubbleView*)[cell.contentView viewWithTag: BUBBLEVIEW_TAG];           

            }

        chatBubble.labelSize = CGSizeMake(50, 18);
        chatBubble.frame = CGRectMake(0, 0, chatBubble.labelSize.width, chatBubble.labelSize.height);

    }

    return cell;
}

编辑:我应该补充一点,重新加载UITableView的函数如下所示:

-(IBAction) btnAdd:(id) sender {
    [listOfMessages addObject:textView.text];

    [self.tableView reloadData];
}

编辑2:我发现当我将单元格滚入和移出视图时,单元格中的自定义视图有时会重绘自己。看来桌面视图刷新会更改自定义视图的参数。

1 个答案:

答案 0 :(得分:0)

你说//This part works, ignore但是如果你正在重复使用CellIdentifier,它可能无效,因为将要出列的单元格可能是一个不同类型的单元格(碰巧具有相同的CellIdentifier)。确保每个单元格类型都有唯一的CellIdentifier。

可以肯定的是,在你的if / else块中加入一些调试来查看你要回来的单元格......