Изменение цвета фона UILabel в UITableViewCell

UITableViewCell поставляется "предварительно встроенным" с UILabel как его единственным и единственным подзапросом после того, как вы его инициализировали. Мне бы очень хотелось изменить цвет фона указанного ярлыка, но независимо от того, что я делаю, цвет не меняется. Код, о котором идет речь:

UILabel* label = (UILabel*)[cell.contentView.subviews objectAtIndex:0];
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor darkGrayColor];
label.opaque = YES;

Ответ 1

Ваш фрагмент кода отлично работает для меня, но это должно быть сделано после того, как ячейка была добавлена ​​в таблицу и показана, я считаю. Если вы вызвали из initWithFrame:reuseIdentifier:, вы получите исключение, поскольку UILabel subview еще не создано.

Наверное, лучшим решением является добавление собственного UILabel, настроенного на ваши стандарты, вместо того, чтобы полагаться на этот (очень рискованный) путь к встроенному.

Ответ 2

Это не работает, потому что UITableViewCell устанавливает свой ярлык backgroundColors в методе layoutSubviews.

Если вы хотите изменить цвет встроенной textLabel или detailTextLabel, подкласс UITableViewCell и переопределить layoutSubviews. Вызовите супер-реализацию, затем измените свойство backgroundColor на то, что вы хотите.

- (void) layoutSubviews
{   
     [super layoutSubviews];

     self.textLabel.backgroundColor = [UIColor redColor];
}

Ответ 3

Добавьте свой собственный ярлык в contentView, когда вы выделяете ячейку, вместо того, чтобы полагаться на извлечение встроенного. Затем вы можете управлять всеми значениями:

UILabel* label = [[[UILabel alloc] init] autorelease];
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor darkGrayColor];
label.opaque = YES;
[cell.contentView addSubview:label];

Ответ 4

for (UIView *views in views.subviews)
{
    UILabel* temp = (UILabel*)[views.subviews objectAtIndex:0];
    temp.textColor = [UIColor whiteColor];        
    temp.shadowColor = [UIColor blackColor];
    temp.shadowOffset = CGSizeMake(0.0f, -1.0f);
}