Проблема с пользовательской меткой в ​​UITableViewCell

У меня есть UITableViewController. В методе cellForRowAtIndexPath я добавил пользовательские настройки для метки:

UILabel *lblMainLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 9, 150, 25)];
    lblMainLabel.text = c.Name;
    lblMainLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
    lblMainLabel.backgroundColor = [UIColor clearColor];
    lblMainLabel.textColor = [UIColor whiteColor];
    [cell.contentView addSubview:lblMainLabel];
    [lblMainLabel release];

Но когда я прокручиваю ВВЕРХ или ВНИЗ в таблице, он всегда добавляет эту метку поверх предыдущей, что я пропускаю?


person 1110    schedule 11.02.2011    source источник


Ответы (2)


вы должны создать UILabel ровно один раз, когда вы создаете ячейку.

Ваш код должен выглядеть так:

if (cell == nil) {
   cell = ...
   UILabel *lblMainLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 9, 150, 25)];
   lblMainLabel.tag = 42;
   lblMainLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
   lblMainLabel.backgroundColor = [UIColor clearColor];
   lblMainLabel.textColor = [UIColor whiteColor];
   [cell.contentView addSubview:lblMainLabel];
   [lblMainLabel release];
}
UILabel *lblMainLabel = [cell viewWithTag:42];
lblMainLabel.text = c.Name;
person Matthias Bauch    schedule 11.02.2011
comment
Почему на бирке должно быть число 42? Или это не имеет большого значения? - person ; 28.01.2013
comment
Тег, конечно, произвольное число. Но вы должны использовать один и тот же номер при назначении тега и при извлечении представления с тегом. - person Matthias Bauch; 29.01.2013

Да, флухтпункт, вы правы. cellForRowAtIndexPath запускается каждый раз, когда прокручивается таблица, она перезагружает данные.

if (cell == nil)
{

}

будет запущен, как только ячейка будет выделена. иначе память также увеличивается.

person Jay    schedule 11.02.2011
comment
Если вы согласны с ответом, пожалуйста, проголосуйте за него и, возможно, добавьте комментарий. Это не совсем ответ. - person Stephen Darlington; 11.02.2011