Применение условного форматирования для всей таблицы (пример 1)

Требования к операционной системе: iOS 5.0 и выше.

Мобильное устройство: iPad.

Описание

В данном примере описывается настройка условного форматирования для всей таблицы экспресс-отчёта. После запуска примера выполняются следующие операции:

Необходимые файлы

В базовый пример «Отображение экспресс-отчёта» необходимо добавить следующий файл:

Исходный код

Для выполнения примера необходимо разместить в теле метода 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];

После выполнения примера таблица экспресс-отчёта примет первоначальный вид.

См. также:

Примеры использования компонентов