Как я могу установить цвет фона ячейки в UITableView на iphone? - PullRequest
4 голосов
/ 22 мая 2009

Как установить цвет фона ячейки в UITableView?

Спасибо.

Ответы [ 7 ]

11 голосов
/ 22 апреля 2011

Я знаю, что это старый пост, но я уверен, что некоторые люди все еще ищут помощи. Вы можете использовать это, чтобы установить цвет фона отдельной ячейки, которая сначала работает:

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
     [cell setBackgroundColor:[UIColor lightGrayColor]];

Однако, как только вы начнете прокручивать, iphone будет использовать ячейки, которые смешивают разные цвета фона (если вы пытаетесь чередовать их). Вам нужно вызвать tableView: willDisplayCell: forRowAtIndexPath. Таким образом, цвет фона устанавливается до загрузки идентификатора повторного использования. Вы можете сделать это так:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
     cell.backgroundColor = ([indexPath row]%2)?[UIColor lightGrayColor]:[UIColor whiteColor];
}

Последняя строка - это просто сжатое выражение if / else. Удачи!

2 голосов
/ 22 мая 2009

Обновление

По-видимому, существующая инфраструктура UITableViewCell очень затрудняет изменение цвета фона ячейки и позволяет ему хорошо работать при всех изменениях ее состояния (режим редактирования и т. Д.).

Решение было опубликовано на этом SO-вопросе , и на нескольких форумах оно рассматривается как "единственное решение, одобренное инженерами Apple". Он включает создание подкласса UITableViewCell и добавление пользовательского представления для свойства backgroundView подклассовой ячейки.

Исходное сообщение - это решение не работает полностью, но все же может быть полезно в некоторых ситуациях

Если у вас уже есть объект UITableViewCell, просто измените его свойство contentView backgroundColor.

Если вам нужно создать UITableViewCells с пользовательским цветом фона, процесс будет немного длиннее. Во-первых, вы захотите создать источник данных для вашего UITableView - это может быть любой объект, который реализует протокол UITableViewDataSource.

В этом объекте вам необходимо реализовать метод tableView:cellForRowAtIndexPath:, который возвращает UITableViewCell, когда ему присваивается NSIndexPath для расположения ячейки в таблице. При создании этой ячейки вы захотите изменить свойство backgroundColor ее contentView.

Не забудьте установить свойство dataSource объекта UITableView для объекта источника данных.

Для получения дополнительной информации вы можете прочитать эти документы API:

Обратите внимание, что для всех трех ссылок необходима регистрация в качестве разработчика Apple.

0 голосов
/ 16 мая 2016

Если вы хотите установить фон ячейки для изображения, используйте этот код:

    // Assign our own background image for the cell
UIImage *background = [UIImage imageNamed:@"image.png"];
UIImageView *cellBackgroundView = [[UIImageView alloc] initWithImage:background];
cellBackgroundView.image = background;
cell.backgroundView = cellBackgroundView;
0 голосов
/ 01 ноября 2012

Вы можете установить backgroundColor из backgroundView. Если backgroundView не существует, вы можете создать его для него.

if (!tableView.backgroundView) {
    tableView.backgroundView = [[UIView alloc] initWithFrame:tableView.bounds];
}
tableView.backgroundView.backgroundColor = [UIColor theMostFancyColorInTheUniverse];
0 голосов
/ 18 февраля 2010

Версия, которую я написал, будет работать в iPhone 3.0 или выше и в противном случае будет работать на белом фоне.

В вашем viewDidLoad методе UITableViewController мы добавляем следующее:

self.view.backgroundColor=[UIColor clearColor];
// Also consider adding this line below:
//self.tableView.separatorColor=[UIColor clearColor];

Когда вы создаете свои ячейки (в моем коде это мой tableView:cellForRowAtIndexPath:), добавьте следующий код:

cell.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"code_bg.png"]];
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 3.0)
{
     [[cell textLabel] setBackgroundColor:[UIColor clearColor]];
}
0 голосов
/ 19 июня 2009

Это прекрасно работает для меня:

NSEnumerator *enumerator = [cell.subviews objectEnumerator];
id anObject;
while (anObject = [enumerator nextObject]) {
    if( [anObject isKindOfClass: [ UIView class] ] )
        ((UIView*)anObject).backgroundColor = [UIColor lightGrayColor];
}
0 голосов
/ 22 мая 2009

backgroundView полностью внизу. Это тот, который показывает закругленные углы и края. То, что вы хотите, это contentView, который находится поверх backgroundView. Он покрывает обычно белую область клетки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...