Применение условного форматирования на основе правила (пример 3)

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

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

Описание

В данном примере описывается настройка условного форматирования для ячеек таблицы на основе правила «Значение между A и B». Для определения свойств правила и настроек условного форматирования на основе правил применяются помощники, работающие с ячейками таблицы.

Исходный код

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

MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
// Получаем массив контроллеров представлений данных
NSArray *controllers =[contr dataViewControllers];
// Определяем значения A и B
double valueA = 7000;
double valueB = 8000;
// Перебираем в цикле контроллеры представлений данных
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];
                
                // Создаём правило условного форматирования
                MAConditionalFormattingRule *formattingRule = [[MAConditionalFormattingRule new] autorelease];
                // Устанавливаем тип правила «Значение между A и B»
                [formattingRule setType: kCFRTBetween];
                
                // Для определения свойств правила создаём помощника, работающего с ячейками таблицы
                MAConditionalFormattingRuleLocalHelper *ruleLocalHelper = [[MAConditionalFormattingRuleLocalHelper new] autorelease];
                // Получаем настройки правила в виде справочника
                NSMutableDictionary *ruleSettings = (NSMutableDictionary*)[ruleLocalHelper gridSettingsDictionaryFrom: formattingRule];
                // Устанавливаем цвет заливки ячеек, удовлетворящих правилу
                [ruleSettings setValue:[UIColor colorWithRed:1 green:0.77 blue:0.27 alpha:1] forKey:@"kGridHeaderMenuRulesABColor"];
                // Помечаем созданное правило как активное
                [ruleSettings setValue: [NSNumber numberWithBool: YES] forKey: @"kGridHeaderMenuRulesAB"];
                // Загружаем настройки правила условного форматирования из справочника
                [ruleLocalHelper setupRule:formattingRule fromGridSettingsDictionary:ruleSettings];
                
                // Инициализируем настройки условного форматирования на основе правил
                MAConditionalFormattingRules *rules = [[MAConditionalFormattingRules new] autorelease];
                // Получаем правило «Значение между A и B»
                MAConditionalFormattingRule *betweenRule = [rules ruleByType: [formattingRule type]];
                // Выполняем слияние правил
                [betweenRule merge: formattingRule];
                
                /* Для определения настроек условного форматирования на базе правил
                создаём помощника, работающего с ячейками таблицы */
                MAConditionalFormattingRulesLocalHelper *rulesLocalHelper = [[MAConditionalFormattingRulesLocalHelper new] autorelease];
                // Получаем настройки правила условного форматирования в виде справочника
                NSMutableDictionary *rulesSettings = (NSMutableDictionary*)[rulesLocalHelper gridSettingsDictionaryFrom: rules];
                // Устанавливаем значения A и B
                [rulesSettings setValue:[NSNumber numberWithDouble: valueA] forKey:@"kGridHeaderMenuRulesABValueA"];
                [rulesSettings setValue:[NSNumber numberWithDouble: valueB] forKey:@"kGridHeaderMenuRulesABValueB"];
                // Получаем настройки условного форматирования из справочника
                rules = [rulesLocalHelper setupFromGridSettingsDictionary: rulesSettings];
                
                // Создаём базового помощника для работы с настройками условного форматирования
                MAConditionalFormattingHelper *formattingHelper = [[MAConditionalFormattingHelper alloc] initWithProxyDataSource: proxyDatasource];
                // Применяем настройки условного форматирования для всей таблицы
                [formattingHelper applyGlobalConditionalFormat: rules];
            }
        }
    }
}

В результате выполнения примера для всей таблицы экспресс-отчёта было применено условное форматирование с использованием правила «Ячейки между A и B». Так все ячейки, содержащие значения от 7000 до 8000, были окрашены в жёлтый цвет:

См. также:

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