Установка цвета фона ячейки таблицы на iPhone
Я хочу добиться эффекта, когда одна ячейка таблицы будет иметь синий фон, следующий будет белым, следующий будет синим снова, а затем белым и так далее … не могли бы вы сообщить мне, как я могу сделай это?
Благодарю.
- iTunes Connect Скриншоты Размеры для всех устройств iOS (iPhone / iPad / Apple Watch)
- Могу ли я заставить пользователя iPhone обновить приложение?
- Изменение размера UIImage (пропорция шкалы)
- Процедура отправки сообщений iOS 6 Facebook заканчивается ошибкой «remote_app_id не соответствует сохраненному id»
- Запуск xcodebuild с разветвленного терминала
- Максимальный размер кэша приложений для iPad / iPhone
- Какая работа была выполнена для кросс-платформенной мобильной разработки?
- Как распределить приложение ios без проводов без управления UDID и перекомпиляции
- Как продлить сертификат разработки iPhone?
- Core-Data iPhone: не удалось найти NSManagedObjectModel
- Добавление представления в StatusBar в iPhone
- Предотвратите скрытие панели навигации UISearchDisplayController
- CADisplayLink OpenGL-рендеринг нарушает поведение UIScrollView
Добавьте этот метод в делегат табличного представления:
#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
и %
by 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]; }
я думаю, это поможет вам
При использовании настройки ячейки таблицы по умолчанию следующие два свойства будут окрашивать как фон ячейки, так и фоновый цвет ее метки, избегая необходимости создания пользовательской метки в качестве подсмотра содержимого contentView ячейки.
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];
Все, что вам нужно сделать, это добавить следующий код в файл реализации controllerа представления таблицы.
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row%2 == 0) { UIColor *altCellColor = [UIColor blackColor]; cell.backgroundColor = altCellColor; }}
Это так просто, как добавление и изменение значений модуля.
Добавить backgroundView
в ячейку и установить цвет фона по вашему выбору.
let backgroundView = View() // add background view via code or via storyboard view.backgroundColor = UIColor.red // your color cell.backgroundView = backgroundView