我在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:我发现当我将单元格滚入和移出视图时,单元格中的自定义视图有时会重绘自己。看来桌面视图刷新会更改自定义视图的参数。
答案 0 :(得分:0)
你说//This part works, ignore
但是如果你正在重复使用CellIdentifier,它可能无效,因为将要出列的单元格可能是一个不同类型的单元格(碰巧具有相同的CellIdentifier)。确保每个单元格类型都有唯一的CellIdentifier。
可以肯定的是,在你的if / else块中加入一些调试来查看你要回来的单元格......