I'm having a funky problem with drawing a custom view in a UITableView. The drawRect function of my custom view, called ChatBubbleView, is just drawing a rectangle of a constant size.
I have an NSLog debugging statement in the drawRect function of ChatBubbleView. The first 5 times I add a cell to the UITableView, everything draws nicely, and I see the NSLog statement trigger. After 5 however, the drawing becomes garbled, and I no longer see the debugging statement.
I'm totally baffled, and I'd appreciate any help you might provide. Thanks in advance!
Here is the function that is called when reloadData is called on the UITableView.
- (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.contentVie开发者_如何学Cw 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;
}
EDIT: I should add that the function that reloads the UITableView looks like this:
-(IBAction) btnAdd:(id) sender {
[listOfMessages addObject:textView.text];
[self.tableView reloadData];
}
EDIT 2: I've discovered that the custom views in the cells sometimes redraw themselves when I scroll the cells in and out of view. It seems that the tableview refreshing changes the parameters of the custom view.
You say //This part works, ignore
but if you are reusing the CellIdentifier it might not work as the cell that will get dequeued could be a different type of cell (that happens to have the same CellIdentifier). Make sure each cell type has a unique CellIdentifier.
To be sure, put some debugging in your if / else block to see what cell you're getting back...
精彩评论