Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере отображается представление контроллера панели измерений. Далее выполняются следующие действия:
измерение «World» делается фиксированным;
выделяется корневой элемент измерения «World», а также снимается выделение;
выделяются дочерние элементы первого уровня у измерения «World», а также снимается выделение;
признаки того, отображаются ли при выборе элементов измерения индикатор загрузки данных и меню.
Для выполнения примера необходимо разместить в теле метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:
// Получаем контроллер для работы с аналитической панелью
MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
// Получаем делегат для работы с экспресс-отчётом
EAReportDelegateImpl *delegate = [contr delegate];
// Получаем объект, представляющий собой основу для построения таблиц с данными
SPPLPivot pivot = PPLPivot::pivot([delegate olapReport]);
// Создаём делегат панели измерений
MADimensionsPanelTableViewDelegate *panelDelegate = [[MADimensionsPanelTableViewDelegate alloc] initWithPivot: pivot];
// Создаём источник данных панели измерений
MADimensionsPanelTableViewDataSource *panelDataSource = [[MADimensionsPanelTableViewDataSource alloc] initWithPivot: [panelDelegate pivot]];
// Создаём контроллер для работы с панелью измерений
MADimensionsPanelTableViewController *tableViewCtrl = [MADimensionsPanelTableViewController new];
[tableViewCtrl setPanelDataSource: panelDataSource];
[tableViewCtrl setPanelDelegate: panelDelegate];
// Удаляем все дочерние представления окна
NSArray *subviews = [self.view subviews];
for (UIView *subView in subviews) {
[subView removeFromSuperview];
}
// Отображаем представление контроллера
UIView *view = [tableViewCtrl view];
[view setFrame: CGRectMake(0, 0, self.view.frame.size.width / 2, self.view.frame.size.height / 2)];
[[self view] addSubview: view];
// Получаем измерение «Социально-экономические показатели»
MADimensionsPanelDimensionDescriptor *dimension = nil;
// Получаем количество измерений
NSUInteger dimensionsCount = [panelDataSource dimensionsPanelTableViewDimensionsCount: tableViewCtrl];
for (int i = 0; i < dimensionsCount; i++) {
// Получаем описание первого измерения
MADimensionsPanelDimensionDescriptor *dimDescriptor = [panelDataSource dimensionsPanelTableView: tableViewCtrl dimensionAtIndex:i];
NSString *title = [dimDescriptor title];
if ([title isEqualToString:@"World"] || [title isEqualToString:@"Countries"]) {
dimension = dimDescriptor;
}
}
if (dimension != nil) {
// Сделаем измерение фиксированным
[panelDelegate dimensionsPanelTableView: tableViewCtrl didChangeRoleOfDimension:dimension toRole:kDRFixedHeader];
} else {
return;
}
// Получаем первый корневой элемент измерения
SPPLCommonTree dimensionElementsTree = [(MADimensionsPanelDimensionDescriptor *)dimension dimension]->elements()->itemsTree();
SNArray rootNodes = dimensionElementsTree->rootNodes();
MADimensionsPanelDimensionElementDescriptor *rootNode = [panelDataSource dimensionsPanelTableView: tableViewCtrl childElement:0 ofElement:NULL ofDimension:dimension];
// Снимаем выделение с корневого элемента указанного измерения
[panelDelegate dimensionsPanelTableView: tableViewCtrl didDeselectAllChildrenOfElement:NULL inDimension:dimension];
// Снимаем выделение у всех потомков корневых элементов указанного измерения
[panelDelegate dimensionsPanelTableView: tableViewCtrl didDeselectAllChildrenOfChildrenOfElement: rootNode inDimension:dimension];
// Получаем источник данных пузырьковой диаграммы
BubbleDataViewDatasource *bubbleDatasource = (BubbleDataViewDatasource *)[delegate bubbleDatasource];
// Создаём контроллер для выбора способа использования метрик пузырьковой диаграммы
MAElementDataSourceRoleSelectorViewController *bubbleElementRoleSelector = [[MAElementDataSourceRoleSelectorViewController alloc] initWithBubbleDataSource: bubbleDatasource];
// Устанавливаем контроллер для выбора способа использования метрик пузырьковой диаграммой
[panelDelegate setRoleSelector: bubbleElementRoleSelector];
// Указываем ключ элемента метрики для контроллера выбора способа использования метрик пузырьковой диаграммой
[bubbleElementRoleSelector dimensionsPanelTableView:tableViewCtrl setMetricElementKey:[rootNode key]];
// Определяем, должно ли отображаться меню в измерении
bool isShouldShowMenuInDimension = [bubbleElementRoleSelector dimensionsPanelTableView: tableViewCtrl shouldShowMenuInDimension:dimension];
if (isShouldShowMenuInDimension) {
// Получаем контроллер для меню элемента
UIViewController *elementMenuController = [panelDelegate dimensionsPanelTableView: tableViewCtrl elementMenuViewControllerForElement:rootNode inDimension: dimension];
[[self view] addSubview: [elementMenuController view]];
} else {
NSLog(@"Меню не должно отображаться в измерении %@", [dimension title]);
}
В результате выполнения примера на экране мобильного устройства была отображена панель измерений источника данных. Корневой элемент измерения «Мир» не выделен:

Не выделены также и дочерние элементы первого уровня у корневого элемента измерения:

В консоли среды разработки было выведено уведомление о том, что меню не должно отображаться для измерения «Мир».
Выделим теперь корневой элемент и его дочерние элементы. Для этого добавим к примеру следующий фрагмент кода:
// Выделяем корневые элементы указанного измерения [panelDelegate dimensionsPanelTableView: tableViewCtrl didSelectAllChildrenOfElement: NULL inDimension: dimension]; // Выделяем все потомки корневых элементов указанного измерения [panelDelegate dimensionsPanelTableView: tableViewCtrl didSelectAllChildrenOfChildrenOfElement: rootNode inDimension: dimension];
После повторного выполнения примера с добавленным фрагментом корневой элемент измерения «Мир» будет выделен:

Выделены также будут дочерние элементы первого уровня у корневого элемента измерения:

См. также: