Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описывается настройка условного форматирования для всей таблицы экспресс-отчёта. После запуска примера выполняются следующие операции:
создаются два объекта с настройками условного форматирования на основе цветовой шкалы, которые затем объединяются;
создаётся и используется помощник, работающий с настройками условного форматирования, основанного на цветовой шкале и применяемого ко всей таблице;
создаётся и используется помощник для применения настроек условного форматирования.
В базовый пример «Отображение экспресс-отчёта» необходимо добавить следующий файл:
ConditionalFormattingObserver.h/.m. Делегат, предназначенный для работы с настройками условного форматирования до и после их обновления.
Для выполнения примера необходимо разместить в теле метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:
MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
// Получаем массив контроллеров представлений данных
NSArray *controllers =[contr dataViewControllers];
// Объявляем помощника для работы с условным форматированием
MAConditionalFormattingHelper *formattingHelper = nil;
// Перебираем в цикле контроллеры представлений данных
for(NSObject *controller in controllers)
{
// Проверяем, является ли текущий контроллер контроллером представления данных в виде таблицы
if([controller isMemberOfClass:[MAGridDataViewController class]])
{
// Получаем объект контроллера представления данных в виде таблицы
MAGridDataViewController *gridController = (MAGridDataViewController *)controller;
// Получаем представление контроллера
UIView *view = [gridController view];
// Получаем массив вложенных представлений
NSArray *subviews = [view subviews];
// Перебираем в цикле вложенные представления
for(NSObject *subview in subviews)
{
// Проверяем, является ли текущее представление табличным представлением
if([subview isMemberOfClass:[NuGridView class]])
{
// Получаем объект табличного представления
NuGridView *gridView = (NuGridView *)subview;
// Получаем делегат для работы с таблицей
MAGridDelegate *delegate = (MAGridDelegate*)[gridView gridDelegate];
// Получаем прокси-источник данных
MAGridProxyDataSource *proxyDatasource = (MAGridProxyDataSource*)[delegate proxyDataSource];
// Определяем настройки условного форматирования
MAConditionalFormattingScale *formatting = [[MAConditionalFormattingScale new] autorelease];
// Устанавливаем идентификатор настроек условного форматирования
[formatting setUid: 1007];
// Применяем условное форматирование ко всей таблице
[formatting setArea: kCFAEntireTable];
MAConditionalFormattingScale *formattingScale = [[MAConditionalFormattingScale new] autorelease];
// Устанавливаем тип условного форматирования
[formattingScale setType: kCFTSpecificColors];
[formattingScale merge: formatting];
// Устанавливаем цвет раскраски элементов шкалы, не имеющих данных
[MAConditionalFormattingScale setNoDataColor:[UIColor grayColor]];
UIColor *noDataColor = [MAConditionalFormattingScale noDataColor];
const CGFloat *components = CGColorGetComponents([noDataColor CGColor]);
CGFloat r = components[0];
CGFloat g = components[1];
CGFloat b = components[2];
NSString *hexString=[NSString stringWithFormat:@"%02X%02X%02X", (int)(r * 255), (int)(g * 255), (int)(b * 255)];
NSLog(@"Цвет заливки ячеек, не имеющих данных: #%@", hexString);
// Получаем шкалу значений
ValueScale *scale = [formattingScale scale];
// Устанавливаем значение шкалы
[scale setScaleValues: [NSArray arrayWithObject: [MAConditionalFormattingScale noDataColor]]];
// Указываем количество значений в шкале
[scale setScaleSteps: 1];
// Указываем тип шкалы
[scale setScaleType: ValueScaleEqual];
// Создаём объект для работы с условным форматированием всей таблицы
MAConditionalFormattingScaleGlobalHelper *scaleHelper = [[MAConditionalFormattingScaleGlobalHelper new] autorelease];
NSMutableDictionary *settings = [[scaleHelper gridSettingsDictionaryFrom: formattingScale] mutableCopy];
// Получаем стандартную палитру цветов
NSArray *defaultPaletteColors= [[SettingsPaletteSelector palettes] objectAtIndex:0];
[settings setValue:defaultPaletteColors forKey:@"kGridColorList"];
[settings setValue:[NSNumber numberWithInt:5] forKey:@"kGridColorGroups"];
// Применяем настройки
formattingScale = [scaleHelper setupFromGridSettingsDictionary: settings];
// Создаём помощника для работы с условным форматированием
formattingHelper = [[MAConditionalFormattingHelper alloc] initWithProxyDataSource: proxyDatasource];
ConditionalFormattingObserver *observer = [[ConditionalFormattingObserver new] autorelease];
[observer setGridView: (NuGridView *)subview];
// Добавляем наблюдателя
[formattingHelper addObserver: observer];
// Применяем настройки условного форматирования
[formattingHelper applyGlobalConditionalFormat: formattingScale];
// Удаляем наблюдателя
[formattingHelper removeObserver: observer];
if ([formattingHelper globalConditionalFormat] != nil) {
NSLog(@"Настройки условного форматирования успешно применены");
}
}
}
}
}
В результате выполнения примера для всей таблицы экспресс-отчёта было применено условное форматирование. Для раскраски ячеек использовалась палитра, состоящая из жёлтого цвета и оттенков зелёного и красного цветов. Ячейки без данных были окрашены в серый цвет:

В консоли среды разработки были выведены шестнадцатиричный код цвета заливки у ячеек без данных и уведомление об успешном применении настроек условного форматирования:
Цвет заливки ячеек, не имеющих данных: #7FFF00
Настройки условного форматирования успешно применены
Удалим настройки условного форматирования, добавив к примеру следующий фрагмент кода:
[formattingHelper removeConditionalFormatting];
После выполнения примера таблица экспресс-отчёта примет первоначальный вид.
См. также: