Применение условного форматирования для строки и столбца таблицы

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

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

Описание

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

Исходный код

Для выполнения примера необходимо разместить в теле метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:

MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
EAReportDelegateImpl *delegate = [contr delegate];
// Получаем источник данных таблицы
GridDataViewDatasource *gridDatasource = (GridDataViewDatasource *)[delegate gridDatasource];
// Получаем массив контроллеров представлений данных
NSArray *controllers =[contr dataViewControllers];
// Перебираем в цикле контроллеры представлений данных
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];
                
                // Получаем постоянный ключ для строки
                id<MAGridDataSourcePersistentKeyProtocol> rowPersistentKey = [gridDatasource rowPersistentKeyByNumber: 0];
                id<MAGridDataSourcePersistentKeyProtocol> columnPersistentKey = [gridDatasource columnPersistentKeyByNumber: 0];
                
                // Создаём пул настроек условного форматирования
                MAConditionalFormattingPool *pool = [[MAConditionalFormattingPool new] autorelease];
                // Объявляем настройки пула
                NSMutableDictionary *scalesData = [NSMutableDictionary dictionary];
                
                // Определяем настройки условного форматирования для строки и столбца
                MAConditionalFormattingScale *rowFormatting = [[MAConditionalFormattingScale new] autorelease];
                [rowFormatting setArea: kCFARows];
                MAConditionalFormattingScale *columnFormatting = [[MAConditionalFormattingScale new] autorelease];
                [columnFormatting setArea: kCFAColumns];
                
                // Создаём шкалу значений для строки
                ValueScale *rowScale = [[ValueScale new] autorelease];
                // Получаем стандартную палитру цветов
                NSArray *defaultPaletteColorsForRows = [[SettingsPaletteSelector palettes] objectAtIndex:0];
                // Устанавливаем значение шкалы
                [rowScale setScaleValues: defaultPaletteColorsForRows];
                // Указываем количество значений в шкале
                [rowScale setScaleSteps: [defaultPaletteColorsForRows count]];
                // Указываем тип шкалы
                [rowScale setScaleType: ValueScaleEqual];
                
                // Создаём шкалу значений для строки
                ValueScale *columnScale = [[ValueScale new] autorelease];
                // Получаем стандартную палитру цветов
                NSArray *defaultPaletteColorsForColumns = [[SettingsPaletteSelector palettes] objectAtIndex:4];
                // Устанавливаем значение шкалы
                [columnScale setScaleValues: defaultPaletteColorsForColumns];
                // Указываем количество значений в шкале
                [columnScale setScaleSteps: [defaultPaletteColorsForColumns count]];
                // Указываем тип шкалы
                [columnScale setScaleType: ValueScaleEqual];
                
                // Создаём ключ пула настроек для условного форматирования строки
                MAConditionalFormattingPoolKey *rowPoolKey = [[MAConditionalFormattingPoolKey new] autorelease];
                [rowPoolKey setArea: [rowFormatting area]];
                [rowPoolKey setRuleType: kCFRTGreatest];
                [rowPoolKey setRowKey: rowPersistentKey];
                
                // Создаём ключ пула настроек для условного форматирования столбца
                MAConditionalFormattingPoolKey *columnPoolKey = [[MAConditionalFormattingPoolKey new] autorelease];
                [columnPoolKey setArea: [columnFormatting area]];
                [columnPoolKey setRuleType: kCFRTGreatest];
                [columnPoolKey setColumnKey: columnPersistentKey];
                
                // Добавляем настройки шкал в пул
                [scalesData setObject:rowScale forKey: rowPoolKey];
                [scalesData setObject:columnScale forKey: columnPoolKey];
                [pool setValue: scalesData forKey:@"scalesData"];
                [rowFormatting setConditionalFormattingPool: pool];
                [columnFormatting setConditionalFormattingPool: pool];
                
                // Подготавливаем настройки для условного форматирования строки и столбца
                [rowFormatting prepareInRow:rowPersistentKey andColumn: nil forDataSource:proxyDatasource];
                [columnFormatting prepareInRow: nil andColumn:columnPersistentKey forDataSource:proxyDatasource];
                
                // Создаём помощника для работы с условным форматированием
                MAConditionalFormattingHelper *formattingHelper = [[MAConditionalFormattingHelper alloc] initWithProxyDataSource: proxyDatasource];
                // Применяем настройки условного форматирования к строке
                [formattingHelper applyConditionalFormat: rowFormatting toRow: rowPersistentKey];
                // Применяем настройки условного форматирования к столбцу
                [formattingHelper applyConditionalFormat: columnFormatting toColumn:columnPersistentKey];
                
                if ([formattingHelper conditionalFormatInRow: rowPersistentKey] != nil) {
                    NSLog(@"Настройки условного форматирования для строки успешно применены");
                }
                if ([formattingHelper conditionalFormatInColumn: columnPersistentKey] != nil) {
                    NSLog(@"Настройки условного форматирования для столбца успешно применены");
                }
            }
        }
    }
}

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

В консоли среды разработки были выведены уведомления о том, что настройки условного форматирования для строки и столбца таблицы были успешно применены.

Удалим настройки условного форматирования для строки и столбца таблицы, добавив к примеру следующий фрагмент кода:

[formattingHelper removeConditionalFormattingFromRow: rowPersistentKey];
[formattingHelper removeConditionalFormattingFromColumn: columnPersistentKey];

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

См. также:

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