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 在 viewDidLoad 函数中设置为 false,并且永远不会更改,因此我知道 if(forumMode) 语句永远不会评估为 true。这就是我将忽略评论放在那里的原因。以上是关于UITableView 中的自定义绘图在 5 个单元格后失败的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Storyboard 中的自定义 UITableViewCell 中配置 UITableView?
UITableView 中的自定义单元格在滑动编辑后立即移动
UIStoryboard 中的自定义原型单元已创建,但未显示在 UITableView