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

Posted

技术标签:

【中文标题】UITableView 中的自定义绘图在 5 个单元格后失败【英文标题】:Custom drawing in UITableView failing after 5 cells 【发布时间】:2010-11-08 08:56:43 【问题描述】:

我在 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:我发现当我滚动单元格进出视图时,单元格中的自定义视图有时会重新绘制。好像tableview刷新改变了自定义view的参数。

【问题讨论】:

【参考方案1】:

您说//This part works, ignore,但如果您重用 CellIdentifier,它可能无法工作,因为将要出队的单元格可能是不同类型的单元格(恰好具有相同的 CellIdentifier)。确保每种单元格类型都有一个唯一的 CellIdentifier。

可以肯定的是,在 if / else 块中进行一些调试,以查看您要返回的单元格...

【讨论】:

我一定会这样做的,谢谢。 BOOL 值 forumMode 在 vi​​ewDidLoad 函数中设置为 false,并且永远不会更改,因此我知道 if(forumMode) 语句永远不会评估为 true。这就是我将忽略评论放在那里的原因。

以上是关于UITableView 中的自定义绘图在 5 个单元格后失败的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Storyboard 中的自定义 UITableViewCell 中配置 UITableView?

UITableView 中的自定义单元格重叠

UITableView 中的自定义单元格在滑动编辑后立即移动

UIStoryboard 中的自定义原型单元已创建,但未显示在 UITableView

从多节 UITableView 中的自定义静态单元格中检索标签文本

UITableView 中的自定义单元格使图像在滚动时重叠