Пользовательский рисунок в UITableView не работает после 5 ячеек - PullRequest
0 голосов
/ 08 ноября 2010

У меня странная проблема с рисованием пользовательского представления в UITableView.Функция drawRect моего пользовательского представления, называемого ChatBubbleView, просто рисует прямоугольник постоянного размера.

У меня есть оператор отладки NSLog в функции drawRect ChatBubbleView.Первые 5 раз я добавляю ячейку в UITableView, все хорошо рисует, и я вижу триггер оператора NSLog.Однако после 5 рисунок становится искаженным, и я больше не вижу оператора отладки.

Я совершенно сбит с толку, и я был бы признателен за любую помощь, которую вы могли бы оказать.Заранее спасибо!

Вот функция, которая вызывается при вызове reloadData для 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.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: Я обнаружил, что пользовательские представления в ячейках иногда перерисовываются, когда я прокручиваю ячейки в и из вида.Похоже, что обновление табличного представления изменяет параметры пользовательского представления.

1 Ответ

0 голосов
/ 08 ноября 2010

Вы говорите //This part works, ignore, но если вы повторно используете CellIdentifier, он может не работать, так как ячейка, которая будет исключена из очереди, может быть ячейкой другого типа (которая имеет тот же CellIdentifier). Убедитесь, что каждый тип ячейки имеет уникальный CellIdentifier.

Конечно, добавьте отладку в блок if / else, чтобы увидеть, какую ячейку вы возвращаете ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...