Алекс ответ здесь лучший, многие люди не понимают, что это происходит, особенно если они не используют фон ClearColor для меток, и в этом случае вы никогда не увидите перезаписи.
Мое предпочтительное решение - создать пользовательскую ячейку со свойствами, которые вы хотите. Так что в этом случае вы бы создали
@interfacce MyCustomCell : UITableViewCell
@property (nonatomic) UILabel *cellLabel;
@end
Присвойте ему свойство UILabel * cellLabel и сделайте весь код, который у вас есть, кроме установки текста меток в инициализации MyCustomCell.m, замените все экземпляры ячейки на self, например:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
{
self.cellLabel = [[UILabel alloc] initWithFrame:cell.frame];
self.cellLabel.textColor = [UIColor blackColor];
self.cellLabel.backgroundColor = [UIColor clearColor];
self.cellLabel.opaque = NO;
[self..contentView addSubview:cellLabel];
self.contentView.backgroundColor = [UIColor colorWithRed:(214.0/255) green:(215.0/255.0) blue:(217.0/255) alpha:1.0];
}
return self;
}
Теперь в вашем cellForRowAtIndexPath используйте MyCustomCell, где вы проверяете, имеет ли cell == nil, вы также можете проверить метку ячейки:
if(cell == nil || cell.cellLabel == nil)
Инициализируйте его точно так же:
cell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
Теперь все, что вам нужно сделать, это установить:
cell.cellLabel.text = [symptomsArray objectAtIndex:indexPath.row];
ваш код в cellForRowAtIndexPath намного чище, эффективнее с памятью, и вы не получите свою ошибку.
Не забудьте установить в ячейке вашего типа тип MyCustomCell в конструкторе интерфейсов.