Как настроить цвет фона UITableViewCell?

187
задан TheNeil 13 May 2019 в 11:01
поделиться

7 ответов

Необходимо установить backgroundColor contentView ячейки к цвету. Если Вы будете использовать аксессуары (такие как стрелки раскрытия, и т.д.), они обнаружатся как белые, таким образом, Вы, возможно, должны будете прокрутить пользовательские версии тех.

191
ответ дан Ben Gottlieb 23 November 2019 в 05:44
поделиться

vlado.grigorov имеет некоторый хороший совет - лучший способ состоит в том, чтобы создать backgroundView и дать этому цвет, установив все остальное на clearColor. Кроме того, я думаю, что путем является единственный способ правильно очиститься, цвет (попробуйте его образец - но установите 'clearColor' вместо 'yellowColor'), который является тем, что я пытался сделать.

4
ответ дан William Denniss 23 November 2019 в 05:44
поделиться

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

Вот образец, где образование ячейки задыхается желтое:

UIView* backgroundView = [ [ [ UIView alloc ] initWithFrame:CGRectZero ] autorelease ];
backgroundView.backgroundColor = [ UIColor yellowColor ];
cell.backgroundView = backgroundView;
for ( UIView* view in cell.contentView.subviews ) 
{
    view.backgroundColor = [ UIColor clearColor ];
}
58
ответ дан Vladimir Grigorov 23 November 2019 в 05:44
поделиться

Настройка фона ячейки табличного представления в конечном счете становится, и "все или ничего" приблизьтесь. Очень трудно изменить цвет или изображение, используемое для фона ячейки содержания способом, которая не выглядит странной.

причина состоит в том, что ячейка на самом деле охватывает ширину представления. Скругленные углы являются просто частью его стиля рисунка и довольного, представление находится в этой области.

при изменении цвета ячейки содержания Вы закончите с белыми битами, видимыми в углах. При изменении цвета всей ячейки у Вас будет блок цвета, охватывающего ширину представления.

можно определенно настроить ячейку, но это не совсем столь легко, как можно думать сначала.

3
ответ дан Andrew Grant 23 November 2019 в 05:44
поделиться

Вот наиболее эффективный способ, с которым я столкнулся для решения этой проблемы, - использовать метод делегата willDisplayCell (он также заботится о белом цвете фона текстовой метки при использовании cell.textLabel. .text и / или cell.detailTextLabel.text):

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { ... }

Когда этот метод делегата вызывается, цвет ячейки контролируется через ячейку, а не через представление таблицы, как при использовании:

- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { ... }

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

if (indexPath.row % 2)
{
    [cell setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
}
else [cell setBackgroundColor:[UIColor clearColor]];

Это решение хорошо сработало в моих обстоятельствах ...

205
ответ дан 23 November 2019 в 05:44
поделиться

Просто поместите это в файл класса делегата UITableView (.m):

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell  forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UIColor *color = ((indexPath.row % 2) == 0) ? [UIColor colorWithRed:255.0/255 green:255.0/255 blue:145.0/255 alpha:1] : [UIColor clearColor];
    cell.backgroundColor = color;
}
19
ответ дан 23 November 2019 в 05:44
поделиться

Это действительно просто, поскольку OS 3.0 просто установила цвет фона ячейки в методе willDisplayCell. Вы не должны устанавливать цвет в cellForRowAtIndexPath.

Это работает как для простого, так и для группового стиля:

Код:

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

PS: Здесь отрывок из документации для willDisplayCell:

«Табличное представление отправляет это сообщение своему делегату непосредственно перед он использует ячейку для рисования строки, тем самым позволяя делегату настраивать объект ячейки перед его отображением. Этот метод дает делегату возможность переопределяют свойства на основе состояния, установленные ранее табличным представлением, такие как выбор и цвет фона. После возвращения делегата табличное представление }} устанавливает только свойства альфа и кадра , и то только при анимации строк, когда они выдвигаются или выходят ".

Я нашел эту информацию в это сообщение от colionel . Поблагодарить его!

104
ответ дан 23 November 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: