Подтвердить что ты не робот

Невозможно установить цвет фона UITableViewCell в IB

Я создал группу ячеек, которые я повторно использую в виде таблицы. Все эти ячейки имеют разные UILabel внутри них, а некоторые UIImageView (ничто не покрывает полную ячейку).

Установка цвета фона в IB не влияет (всегда белый или прозрачный, не может сказать, какой из них). Но если я нажимаю Command-R (имитировать интерфейс), ячейка имеет правильный фоновый цвет в симуляторе.

Я попытался установить его в tableView:cellForRowAtIndexPath:, но он не работает, как я думал.

Это трюк:

cell.contentView.backgroundColor = [UIColor redColor];

но они не действуют (даже если я установил cell.contentView.backgroundColor в clearColor):

cell.backgroundView.backgroundColor = [UIColor redColor];

cell.backgroundColor = [UIColor redColor];

Я установил все элементы макета/шрифта/фона в IB. Любая идея, почему это не работает в этом случае?

Почему мне нужно изменить contentView backgroundColor, а не backgroundView?

Кажется, это обычная проблема. Может кто-нибудь, пожалуйста, укажите мне в правильном направлении (наконец) понять, как цвета фона обрабатываются в ячейке представления таблицы.

4b9b3361

Ответ 1

Там проще: когда вы создаете UITableViewCell в Interface Builder, просто перетащите дополнительный UIView, чтобы он охватывал весь UITableViewCell, который вы создаете в IB. Поместите дополнительные элементы пользовательского интерфейса поверх этого дополнительного UIView. Вы можете установить этот дополнительный UIView в любой фон, который вам нравится.

В StackOverflow есть несколько ответов, в которых предлагается изменить цвет фона вашего UITableViewCell с помощью строки кода, подобной этой:

cell.contentView.backgroundColor = [UIColor redColor];

Если вы добавите тень в ячейку, слегка изменив размер флага contentView, вы можете обнаружить, что эта строка изменит цвет фона вашей ячейки и цвет вашей области тени.

Ответ 2

Чтобы изменить цвет фона ячейки, вы должны сделать это в willDisplayCell:forRowAtIndexPath: метод. Это упомянуто в документации UITableViewCell в нижней части обзора. Итак, вам нужно:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = [UIColor redColor];  
}

ContentView - это просто рекомендуемое подпредставление для размещения пользовательских элементов управления, чтобы ячейка правильно планировалась при редактировании таблицы.

Ответ 3

Я нашел этот Cocoa с любовью статьи действительно полезен, поскольку он смотрит на полностью настроенное представление таблицы и как это сделать.