Как настроить цвет фона UITableViewCell? - PullRequest
186 голосов
/ 11 ноября 2008

Я хотел бы настроить фон (и, возможно, границу) всех UITableViewCells в моем UITableView. Пока я не смог настроить этот материал, поэтому у меня есть куча белых фоновых ячеек, которые по умолчанию.

Есть ли способ сделать это с помощью iPhone SDK?

Ответы [ 17 ]

3 голосов
/ 12 ноября 2008

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

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

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

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

3 голосов
/ 26 февраля 2013

Создайте изображение для использования в качестве фона в Photoshop или GIMP и назовите его myimage. Затем добавьте этот метод в ваш класс tableViewController:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    UIImage *cellImage = [UIImage imageNamed:@"myimage.png"];//myimage is a 20x50 px with  gradient  color created with gimp
    UIImageView *cellView = [[UIImageView alloc] initWithImage:cellImage];
    cellView.contentMode = UIContentViewModeScaleToFill;
    cell.backgroundView = cellView;
    //set the background label to clear
    cell.titleLabel.backgroundColor= [UIColor clearColor];
}

Это также будет работать, если вы установили UITableView на custom в инспекторе атрибутов.

2 голосов
/ 07 февраля 2011

Мое решение состоит в том, чтобы добавить следующий код в событие cellForRowAtIndexPath:

UIView *solidColor = [cell viewWithTag:100];
if (!solidColor) {

    solidColor = [[UIView alloc] initWithFrame:cell.bounds];
    solidColor.tag = 100; //Big tag to access the view afterwards
    [cell addSubview:solidColor];
    [cell sendSubviewToBack:solidColor];
    [solidColor release];
}
solidColor.backgroundColor = [UIColor colorWithRed:254.0/255.0
                                             green:233.0/255.0
                                              blue:233.0/255.0
                                             alpha:1.0];

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

1 голос
/ 20 апреля 2017

Это будет работать в последнем Xcode.

-(UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
    cell.backgroundColor = [UIColor grayColor];
}
1 голос
/ 07 декабря 2012

Подкласс UITableViewCell и добавьте это в реализацию:

-(void)layoutSubviews
{
    [super layoutSubviews];
    self.backgroundColor = [UIColor blueColor];
}
1 голос
/ 04 апреля 2013
    UIView *bg = [[UIView alloc] initWithFrame:cell.frame];
    bg.backgroundColor = [UIColor colorWithRed:175.0/255.0 green:220.0/255.0 blue:186.0/255.0 alpha:1]; 
    cell.backgroundView = bg;
    [bg release];
0 голосов
/ 19 октября 2015

Попробуйте это:

- (void)tableView:(UITableView *)tableView1 willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
    tableView1.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"Cream.jpg"]];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...