Отображение окна отправки почты в аналитической панели

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

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

Описание

В данном примере отображаются индикатор загрузки аналитической панели, а затем модальное окно с сообщением. Через три секунды после их отображения они скрываются. После этого отображается окно отправки почты.

Также в консоль среды разработки выводится количество настроек аналитической панели, описание её данных, сообщение модального окна и заголовок панели измерений.

Исходный код

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

// Выполняем пользовательский пример, размещённый в теле данного метода
-(void) executeExample {
    // Получаем контроллер аналитической панели
    MABaseReportViewController *controller = m_controller;
    // Выводим количество настроек аналитической панели
    NSDictionary *settings = [[controller delegate] reportSettings];
    if(settings != nil){
        NSLog(@"Количество настроек аналитической панели: %i", [settings count]);
    }
    // Отображаем индикатор загрузки аналитической панели
    [controller showActivityIndicator];
    // Продолжаем выполнение примера после паузы
    [self performSelector:@selector(continueExample:) withObject:controller afterDelay:3];
}
// Продолжаем выполнение примера
-(void) continueExample:(MABaseReportViewController *)controller {
    // Получаем заголовок аналитической панели
    NSString *title = @"";
    if ([[(MADashboardReportViewController*)controller delegate] title]) {
        title = [[(MADashboardReportViewController*)controller delegate] title];
    }
    // Отображаем модальное окно с сообщением
    [controller showWaiterWithTitle:title andMessage:@" Выполняется загрузка"];
    // Выводим сообщение модального окна
    NSString *message = [[controller waiterView] message];
    NSLog(@"Сообщение модального окна: %@", message);
    // Запускаем таймер на три секунды
    [NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@selector(timerEvent)userInfo:nil repeats:NO];
}
// Обрабатываем событие таймера
-(void) timerEvent {
    // Получаем контроллер аналитической панели
    MADashboardReportViewController *controller = (MADashboardReportViewController*)m_controller;
    // Выводим описание данных аналитической панели
    NSData *dashboardData = [[controller delegate] dashboardData];
    if(dashboardData != nil)
    NSLog(@"Описание данных аналитической панели: %@", dashboardData);
    // Выводим заголовок панели измерений
    NSString *dimPanelTitle = [[[controller delegate] dimensionsPanel] title];
    if(dimPanelTitle != nil)
    NSLog(@"Заголовок панели измерений: %@", dimPanelTitle);
    // Скрываем модальное окно с сообщением
    [controller hideWaiter];
    // Скрываем индикатор загрузки
    [controller hideActivityIndicator];
    // Отображаем окно отправки почты
    [controller composeMail];
}

Также необходимо заменить код в файле статичного примера MADashboardReportViewController.mm на код, приведенный в раскрывающемся списке:

Замещающий код для файла MADashboardReportViewController.mm.

Тело метода addDimensionPanelControlWithKey:syncIndexKey: в классе MADashboardReportViewControllerDelegateImpl заменить на следующий код:

// Определяем ключ измерения
int64 dimensionKey = -1;
// Определяем массив ключей измерений-наблюдателей
NSMutableArray *listenerKeys = [NSMutableArray array];
// Получаем ключ измерения и массив ключей измерений-наблюдателей
N_FOREACH(SPPLDashboardSynchronizationDimension, i, m_dashboardReport->synchronizationDimensions()->dimensions()) {
    SPPLDashboardDataSourceDimensionObject dimensionObject = i->dimensionObject();
        if (i->syncIndexKey() == syncIndexKey && dimensionObject->isOriginal()) {
            dimensionKey = dimensionObject->key();
            [listenerKeys addObject:dimensionObject->dataSourceObject()->dashboardRelatedId()->nsString()];
        }
 }
// Создаёт объект, описывающий элемент управления аналитической панели
[self addDimensionPanelControlWithKey:key dimensionKey:dimensionKey listenerKeys:listenerKeys];

В файле MADashboardReportViewControllerFactory.m заменить код метода createReport:metabase: на следующий:

// Создаем делегат контроллера для работы с аналитической панелью
MADashboardReportDelegateImpl *delegate = [[[MADashboardReportDelegateImpl alloc] initWithDashboardReport:dashboardReport metabase:metabase] autorelease];
// Создаем аналитическую панель на основе делегата
MADashboardReportViewController *report = [[[MADashboardReportViewController alloc] initWithDelegate:delegate] autorelease];
// Устанавливаем панель измерений
report.panelViewController.contentViewController = delegate.dimensionsPanel;
return report;

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

Спустя три секунды на фоне затемнённого окна будет отображено модальное окно с сообщением:

Также в консоль среды разработки будет выведена информация об аналитической панели:

Сообщение модального окна: Выполняется загрузка

Спустя еще три секунды индикатор загрузки аналитической панели и окно с сообщением будут скрыты, после чего отобразится окно отправки почты:

См. также:

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