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

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

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

Описание

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

Исходный код

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

MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
// Получаем массив контроллеров представлений данных
NSArray *controllers =[contr dataViewControllers];
// Инициализируем настройки условного форматирования на основе правил
MAConditionalFormattingRules *rules = [[MAConditionalFormattingRules new] autorelease];
// Объявляем помощника для работы с настройками условного форматирования
MAConditionalFormattingHelper *formattingHelper = nil;
// Определяем значения 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];
                [formattingRule setValueA: valueA];
                [formattingRule setValueB: valueB];
                // Устанавливаем цвет заливки для ячеек, удовлетворяющих правилу
                [formattingRule setColor: [UIColor colorWithRed:1 green:0.77 blue:0.27 alpha:1]];
                // Используем абсолютные числовые значения
                [formattingRule setValueFormat: kCFRVFNumber];
                // Используем правило «Значение между A и B»
                [formattingRule setType: kCFRTBetween];
                // Помечаем созданное правило как активное
                [formattingRule setActive: YES];
                
                // Получаем правило «Значение между A и B»
                MAConditionalFormattingRule *betweenRule = [rules ruleByType: kCFRTBetween];
                // Выполняем слияние правил
                [betweenRule merge: formattingRule];
                
                // Создаём базового помощника для работы с настройками условного форматирования
                formattingHelper = [[MAConditionalFormattingHelper alloc] initWithProxyDataSource: proxyDatasource];
                // Применяем настройки условного форматирования для всей таблицы
                [formattingHelper applyGlobalConditionalFormat: rules];
            }
        }
    }
}

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

Деактивируем применённое правило. Для этого добавим к примеру следующий сценарий:

// Выключаем все правила
[rules turnAllInactive];
// Применяем новые настройки условного форматирования
[formattingHelper applyGlobalConditionalFormat: rules];

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

См. также:

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