Требования к операционной системе: 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];
После выполнения примера таблица экспресс-отчёта примет первоначальный вид.
См. также: