Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере происходит отображение панели настроек представления и индикатора загрузки, происходит выделение ячеек таблицы и устанавливается массив кнопок действий над отчетом. Спустя три секунды после запуска примера панель настроек и индикатор загрузки скрываются.
Также в консоль среды разработки выводится следующая информация:
размер данных состояния представления;
размеры скриншота содержимого представления;
признак наличия элементов управления представлением;
заголовок представления и контроллера;
количество настроек контроллера;
значение тэга контроллера.
Для выполнения примера необходимо разместить взамен метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:
// Выполняем пользовательский пример
-(void) executeExample {
// Получаем контроллер представления отчета
MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController*)m_controller;
// Отображаем таблицу
if([[contr delegate] mode] != kViewModeTable)
[contr setDataViewMode:kViewModeTable];
// Получаем текущий контроллер
MAGridDataViewController *activeController = (MAGridDataViewController *)[contr activeDataViewController];
// Извещаем делегат о завершении обработки действий пользователя
if(![activeController isAvailable]){
[[activeController delegate] dataViewController:activeController availabilityUpdated:YES];
}
// Получаем представление контроллера
UIView *view = [activeController view];
// Получаем массив вложенных представлений
NSArray *subviews = [view subviews];
// Перебираем в цикле вложенные представления
for(NSObject *subview in subviews)
{
// Проверяем, является ли текущее представление табличным представлением
if([subview isMemberOfClass:[NuGridView class]])
{
// Получаем объект табличного представления
NuGridView *gView = (NuGridView *)subview;
// Выделяем ячейки таблицы
[[gView controller] selectAreaFromRow:[gView rowWithNumber:0] column:[gView columnWithNumber:0] toRow:[gView rowWithNumber:1] column:[gView columnWithNumber:1]];
// Обновляем таблицу
[activeController updateDataWithGridSelection];
}
}
// Проверяем наличие информации о состоянии представления
NSData *state = [[activeController delegate] stateForDataViewController:activeController];
if (state != nil){
GridDataViewDatasource *ds1 = [activeController gridDatasource];
// Загружаем настройки представления
[activeController loadState];
GridDataViewDatasource *ds2 = [activeController gridDatasource];
// Если изменился источник данных, извещаем контроллер о смене отметки источника
if(ds1 != ds2){
[[activeController delegate] dataViewControllerChangedSelection:activeController];
}
// Перезагружаем данные
[activeController reloadData];
// Сохраняем состояние
[[activeController delegate] setState:state forDataViewController:activeController];
}
else{
// Сохраняем состояние представления
[activeController saveState];
NSLog(@"Размер данных состояния представления: %i байт", [[[contr delegate] gridState] length]);
}
// Генерируем содержимое контроллера представления в виде PDF и выводим его размер
if(![activeController isDoingCalculations]){
if([activeController canGeneratePDFContent]){
[activeController generatePDFWithCompletionBlock:^(NSData * data) {
NSLog(@"Размер содержимого контроллера представления в виде PDF: %i байт", [data length]);
}];
}
}
// Устанавливаем массив кнопок действий над контроллером
NSArray *buttons = [activeController barButtonItems];
if((buttons != nil) && ([buttons count] > 1)){
NSMutableArray *arr = [NSMutableArray arrayWithObject:buttons[0]];
[[activeController delegate] setBarButtonItems:arr forDataViewController:activeController];
}
// Выводим размер скриншота содержимого контроллера
[[activeController delegate] dataViewControllerReadyForScreenshot:activeController];
CGSize s = [[activeController screenshot] size];
NSLog(@"Размер скриншота содержимого контроллера: (%f x %f)", s.width, s.height);
// Выводим информацию о контроллере представления
NSLog(@"Признак наличия элементов управления представлением: %hhd", [activeController hasControls]);
[[activeController delegate] dataViewControllerReloadTitle:activeController];
if([activeController isDataViewTitleVisible])
NSLog(@"Заголовок представления: %@", [activeController dataViewTitle]);
NSLog(@"Заголовок контроллера представления: %@", [activeController title]);
NSLog(@"Значение тэга представления: %i", [activeController tag]);
NSDictionary *config = [[activeController delegate] configurationForDataViewController:activeController];
NSLog(@"Количество настроек контроллера: %i", [config count]);
// Отображаем индикатор загрузки
[[activeController delegate] dataViewControllerWillStartCalculations:activeController];
// Отображаем панель настроек представления
if([activeController isAvailable] && [activeController hasAppeared]){
if([activeController hasSettingsController]){
[[activeController delegate] dataViewController:activeController showSettingsController:[activeController settingsController] fromView:[activeController view]];
}
}
// Запускаем таймер на 3 секунды
[NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@selector(timerEvent) userInfo:nil repeats:NO];
}
// Обрабатываем событие таймера
- (void) timerEvent{
// Получаем контроллер представления отчета
MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController*)m_controller;
// Получаем текущее представление
id<MADataViewControllerProtocol> activeController = [contr activeDataViewController];
// Скрываем панель настроек контроллера
[[activeController delegate] dataViewControllerHideSettings:activeController];
// Скрываем индикатор загрузки
[[activeController delegate] dataViewControllerDidFinishCalculations:activeController];
}
В результате выполнения примера будут отображены панель настроек представления и индикатор загрузки:

Также в консоль среды разработки будет выведена информация о контроллере текущего представления:
Размер данных состояния представления: 17707 байт
Размер скриншота содержимого контроллера: (444.000000 x 980.000000)
Признак наличия элементов управления представлением: 1
Заголовок контроллера представления: Таблица
Значение тэга представления: 0
Количество настроек контроллера: 1
Размер содержимого контроллера представления в виде
PDF: 2748895 байт
Через три секунды после выполнения примера панель настроек представления и индикатор загрузки будут скрыты:

См. также: