Изменение цвета фона 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);
}