Я хочу добиться эффекта, когда одна ячейка таблицы будет иметь синий фон, следующий будет белым, следующий будет синим снова, а затем белым и так далее... не могли бы вы сообщить мне Как мне это сделать?
Спасибо.
Я хочу добиться эффекта, когда одна ячейка таблицы будет иметь синий фон, следующий будет белым, следующий будет синим снова, а затем белым и так далее... не могли бы вы сообщить мне Как мне это сделать?
Спасибо.
Добавьте этот метод в делегат табличного представления:
#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];
}
Вы должны установить цвет фона представления содержимого ячейки
cell.contentView.backgroundColor = [UIColor colorWithRed...]
Это установит фон всей ячейки.
Чтобы сделать это для альтернативных ячеек, используйте indexPath.row
и %
на 2.
Если вы хотите установить цвет ячейки на основе некоторого состояния в фактическом объекте данных ячейки, это другой подход:
Если вы добавите этот метод в делегат табличного представления:
- (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.
Метод 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];
добавьте следующий код в cellForRowAtIndexPath
if (indexPath.row % 2 == 0){
cell.backgroundColor =[UIColor blueColor];
} else {
cell.backgroundColor =[UIColor whiteColor];
}
Я думаю, это поможет вам
При использовании настройки ячейки таблицы по умолчанию следующие два свойства будут окрашивать как фон ячейки, так и фоновый цвет ее метки, избегая необходимости создавать пользовательскую метку в качестве подсмотра содержимого cellView.
cell.textLabel.backgroundColor = [UIColor redColor];
cell.contentView.backgroundColor = [UIColor redColor];
//метод экономии времени:
//в ячейке для индексного метода:
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);
}
//изменим содержимое ячейки, а затем вернем ее. Легкая работа.
//это код схемы. Не копируйте его напрямую.
Это сработало для меня.. В 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, вы можете выполнить вышеуказанную функцию.
Этот код является немного более чистым решением для случая, когда вы используете встроенную текстовую метку и не хотите, чтобы белый цвет текста текстовой метки затенял цвет фона. Это также устраняет проблему нарушения округлых углов сгруппированного стиля табличного представления (что происходит, когда вы используете 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
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];
Все, что вам нужно сделать, это добавить следующий код в файл реализации контроллера табличного представления.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row%2 == 0) {
UIColor *altCellColor = [UIColor blackColor];
cell.backgroundColor = altCellColor;
}}
Затем он так же просто, как добавление и изменение значений модуля.