Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описывается создание регламентного отчета. После запуска примера выполняются следующие операции:
создается регламентный отчет;
извлекается делегат регламентного отчета;
создается новый делегат регламентного отчета;
извлекается объект регламентного отчета из созданного делегата;
новый делегат регламентного отчета сравнивается с делегатом, полученным из регламентного отчета;
новый делегат устанавливается в качестве делегата регламентного отчета;
из регламентного отчета извлекается представление просмотрщика регламентных отчетов;
из просмотрщика регламентных отчетов извлекается родительский контроллер отчетов;
извлекается значение режима просмотрщика регламентных отчетов.
Для выполнения примера необходимо разместить в теле метода executeExample класса ViewController (см. раздел «Отображение регламентного отчёта») следующий код:
-(void)executeExample {
if (m_proceduralReportDescriptor->formatVersion() == 1) {
// Создаём объект отчёта
SPPLProceduralReport proceduralReport = PPLProceduralReport::proceduralReport(m_proceduralReportDescriptor);
MAProceduralReportViewController *proceduralReportController = (MAProceduralReportViewController *)[MAProceduralReportViewControllerFactory createReport:m_proceduralReport];
// Получаем делегат регламентного отчета
MAProceduralReportViewControllerDelegateImpl * proceduralReportDelegate1 = [proceduralReportController delegate];
// Создаем новый делегат для регламентного отчета
MAProceduralReportViewControllerDelegateImpl *proceduralReportDelegate2 = [[MAProceduralReportViewControllerDelegateImpl alloc] initWithProceduralReport:proceduralReport];
// Выводим в консоль среды разработки результат сравнения полученного и нового делегатов
if([proceduralReportDelegate1 isEqual:proceduralReportDelegate2] == YES) NSLog(@"Сравнение делегатов: объекты равны");
else NSLog(@"Сравнение делегатов: объекты не равны");
NInteger worksheetsCount = 0;
if(proceduralReportDelegate2.proceduralReport->worksheets()->items() != NULL) {
worksheetsCount = [proceduralReportDelegate2 proceduralReport]->worksheets()->items()->count();
}
NSLog(@"Количество листов в регламентном отчете: %d", worksheetsCount);
// Задаем новый делегат для регламентного отчета
[proceduralReportController setDelegate:proceduralReportDelegate2];
// Отображаем регламентный отчет
[self showViewControllerInNavigationController: proceduralReportController];
// Получаем массив представлений в регламентном отчете
NSArray *dataViewControllers = [proceduralReportController dataViewControllers];
// Перебираем в цикле представления регламентного отчета
for(UIViewController *controller in dataViewControllers)
{
// Проверяем, является ли текущее представление просмотрщиком листов регламентного отчета
if([controller isMemberOfClass:[MAProceduralReportDataViewController class]]) {
// Выводим информацию о представлении просмотрщика листов
[self printMAProceduralReportDataViewControllerInfo:
(MAProceduralReportDataViewController *)controller];
}
}
}
if (m_proceduralReportDescriptor->formatVersion() == 2) {
// Создаём объект отчёта
SPPLProceduralReport2 proceduralReport = PPLProceduralReport2::proceduralReport(m_proceduralReportDescriptor);
MAProceduralReport2ViewController *proceduralReportController = (MAProceduralReport2ViewController *)[MAProceduralReportViewControllerFactory createReport:m_proceduralReport];
// Получаем делегат регламентного отчета
MAProceduralReport2ViewControllerDelegateImpl * proceduralReportDelegate1 = [proceduralReportController delegate];
// Создаем новый делегат для регламентного отчета
MAProceduralReport2ViewControllerDelegateImpl *proceduralReportDelegate2 = [[MAProceduralReport2ViewControllerDelegateImpl alloc] initWithProceduralReport:proceduralReport];
// Выводим в консоль среды разработки результат сравнения полученного и нового делегатов
if([proceduralReportDelegate1 isEqual:proceduralReportDelegate2] == YES) NSLog(@"Сравнение делегатов: объекты равны");
else NSLog(@"Сравнение делегатов: объекты не равны");
NInteger worksheetsCount = 0;
if(proceduralReportDelegate2.proceduralReport->worksheets()->items() != NULL) {
worksheetsCount = [proceduralReportDelegate2 proceduralReport]->worksheets()->items()->count();
}
NSLog(@"Количество листов в регламентном отчете: %d", worksheetsCount);
// Задаем новый делегат для регламентного отчета
[proceduralReportController setDelegate:proceduralReportDelegate2];
// Отображаем регламентный отчет
[self showViewControllerInNavigationController: proceduralReportController];
// Получаем массив представлений в регламентном отчете
NSArray *dataViewControllers = [proceduralReportController dataViewControllers]; // Перебираем в цикле представления регламентного отчета
for(UIViewController *controller in dataViewControllers) {
// Проверяем, является ли текущее представление просмотрщиком листов регламентного отчета
if([controller isMemberOfClass:[MAProceduralReportExtDataViewController class]]) {
// Выводим информацию о представлении просмотрщика листов
[self printMAProceduralReportDataViewControllerInfo:
(MAProceduralReportDataViewController *)controller];
}
}
}
}
-(void)printMAProceduralReportDataViewControllerInfo: (MAProceduralReportDataViewController *) dataViewController {
// Получаем представление просмотрщика регламентных отчетов
MAProceduralReportDataViewControllerBase *reportDataViewControllerBase = (MAProceduralReportDataViewControllerBase *)dataViewController;
// Получаем родительский контроллер отчетов
MADataReportViewController *dataReportViewController =[reportDataViewControllerBase reportController];
// Выводим в консоль среды разработки признак отображения заголовка отчета
NSLog(@"Признак отображения заголовка отчета: %@",[dataReportViewController showTitle]? @"отображается":@"не отображается");
// Выводим в консоль среды разработки режим просмотрщика регламентных отчетов
NSString *mode = @"";
switch([reportDataViewControllerBase mode])
{
case kReadMode:mode = @"режим чтения"; break;
case kNoteMode:mode = @"режим заметок"; break;
case kSearchMode:mode = @"режим поиска"; break;
default: mode = @"не определен"; break;
}
NSLog(@"Режим просмотрщика регламентных отчетов: %@", mode);
}
В результате выполнения примера на экране мобильного устройства будет отображен созданный регламентный отчет:

Также в консоли среды разработки будет выведен результат сравнения полученного и созданного делегатов регламентного отчета, количество листов в регламентном отчете, признак отображения заголовка отчета, полученный из родительского контроллера отчетов, а также значение режима просмотрщика регламентных отчетов:
Сравнение делегатов: объекты не равны
Количество листов в регламентном отчете: 4
Признак отображения заголовка отчета: не отображается
Режим просмотрщика регламентных отчетов: режим чтения
См. также: