开发者

Custom drawing in UITableView failing after 5 cells

开发者 https://www.devze.com 2023-01-24 12:08 出处:网络
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'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...

0

精彩评论

暂无评论...
验证码 换一张
取 消