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

Установка цвета фона ячейки таблицы на iPhone

Я хочу добиться эффекта, когда одна ячейка таблицы будет иметь синий фон, следующий будет белым, следующий будет синим снова, а затем белым и так далее... не могли бы вы сообщить мне Как мне это сделать?

Спасибо.

4b9b3361

Ответ 1

Добавьте этот метод в делегат табличного представления:

#pragma mark UITableViewDelegate
- (void)tableView: (UITableView*)tableView 
  willDisplayCell: (UITableViewCell*)cell 
forRowAtIndexPath: (NSIndexPath*)indexPath
{
    cell.backgroundColor = indexPath.row % 2 
        ? [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] 
        : [UIColor whiteColor];
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.detailTextLabel.backgroundColor = [UIColor clearColor];
}

Ответ 2

Вы должны установить цвет фона представления содержимого ячейки

cell.contentView.backgroundColor = [UIColor colorWithRed...]

Это установит фон всей ячейки.

Чтобы сделать это для альтернативных ячеек, используйте indexPath.row и % на 2.

Ответ 3

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

Если вы добавите этот метод в делегат табличного представления:

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

Затем в вашем методе cellForRowAtIndexPath вы можете:

if (myCellDataObject.hasSomeStateThatMeansItShouldShowAsBlue) {
    cell.contentView.backgroundColor = [UIColor blueColor];
}

Это избавляет от необходимости снова извлекать ваши объекты данных в методе willDisplayCell.

Ответ 4

Метод cell.contentView.backgroundColor = [UIColor colorWithRed...] в ответе lostInTransit работает, если вы не используете встроенную метку UITableViewCell.

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

Я не нашел способа отредактировать встроенную метку, чтобы она была непрозрачной (вы можете получить к ней доступ через UILabel* cellLabel = [cell.contentView.subviews objectAtIndex:0]).

Я решил проблему, добавив свой собственный UILabel. Вот так:

UILabel* cellLabel = [[[UILabel alloc] initWithFrame:cell.frame] autorelease];
cellLabel.text = @"Test with non-opaque label";
cellLabel.backgroundColor = [UIColor clearColor];
cellLabel.opaque = NO;

[cell.contentView addSubview:cellLabel];
cell.contentView.backgroundColor = [UIColor darkGrayColor];

Ответ 5

добавьте следующий код в cellForRowAtIndexPath

if (indexPath.row % 2 == 0){
    cell.backgroundColor =[UIColor blueColor];
} else {
    cell.backgroundColor =[UIColor whiteColor];
}

Я думаю, это поможет вам

Ответ 6

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

cell.textLabel.backgroundColor = [UIColor redColor];
cell.contentView.backgroundColor = [UIColor redColor];

Ответ 7

//метод экономии времени:

//в ячейке для индексного метода:

static NSString* evenIdentifier = @"even";
static NSString* oddIdentifier = @"odd";

__weak identifier;
if(indexPath.row %2 ==0)
{
    identifier = evenIdentifier;
}else{
    identifier = oddIdentifier;
}

cell = dequeue..WithIdentifier: identifier;
if(cell == nil){
    cell = allocOrLoadNib...;
    cell.backgroundColor = (indexPath.row %2 ==0 ? evenColor : oddColor);
}

//изменим содержимое ячейки, а затем вернем ее. Легкая работа.

//это код схемы. Не копируйте его напрямую.

Ответ 8

Это сработало для меня.. В cellForRowAtIndexPath,

cell.textLabel.backgroundColor = [UIColor clear];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor grayColor]; //whichever color u want
cell.backgroundColor = cell.contentView.backgroundColor;

Для вас, как упоминалось ранее на основе значения indexPath% 2, вы можете выполнить вышеуказанную функцию.

Ответ 9

Этот код является немного более чистым решением для случая, когда вы используете встроенную текстовую метку и не хотите, чтобы белый цвет текста текстовой метки затенял цвет фона. Это также устраняет проблему нарушения округлых углов сгруппированного стиля табличного представления (что происходит, когда вы используете cell.contentView.backgroundColor вместо cell.backgroundColor):

UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.backgroundColor = [UIColor redColor];
cell.textLabel.backgroundColor = [UIColor clearColor]; //transparent background

Ответ 10

    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];

Ответ 11

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

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row%2 == 0) {
    UIColor *altCellColor = [UIColor blackColor];
    cell.backgroundColor = altCellColor;
}}

Затем он так же просто, как добавление и изменение значений модуля.