Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы работы с заметками в регламентном отчете. После запуска примера выполняются следующие операции:
извлекается представление просмотрщика листов регламентного отчета;
извлекается количество заметок в регламентном отчете из представления просмотрщика листов;
в регламентный отчет добавляется новая заметка;
создается новый делегат просмотрщика отчетов;
созданная заметка регламентного отчета открывается с помощью делегата просмотрщика отчетов;
из просмотрщика листов извлекается заметка по указанному индексу;
полученная заметка скрывается с помощью свойства <PopoverContainedControllerProtocol>.popover в делегате просмотрщика отчетов;
заметка, полученная по заданному индексу, удаляется.
В базовый пример «Отображение регламентного отчёта» необходимо добавить следующий файл:
ProceduralDelegateImpl.h/.m. Делегат просмотрщика отчетов.
Для выполнения примера необходимо создать класс делегата просмотрщика отчетов, в котором реализованы методы и свойства протоколов <ProceduralDelegate> и <PopoverContainedControllerProtocol>, добавить заголовочный файл класса в исходный код класса ViewController (см. раздел «Отображение регламентного отчёта»), а также разместить в теле метода executeExample класса ViewController следующий код:
// Получаем объект регламентного отчета
MAProceduralReportViewController *proceduralReportController = (MAProceduralReportViewController *)m_controller;
// Получаем массив представлений в регламентном отчете
NSArray *dataViewControllers = [proceduralReportController dataViewControllers];
// Перебираем в цикле представления регламентного отчета
for( UIViewController *controller in dataViewControllers)
{
// Проверяем, является ли текущее представление просмотрщиком листов регламентного отчета
if([controller isMemberOfClass:[MAProceduralReportDataViewController class]])
{
// Получаем представление просмотрщика листов
MAProceduralReportDataViewController *dataViewController =(MAProceduralReportDataViewController *)controller;
// Выводим в консоль среды разработки количество заметок в регламентном отчете
NSLog(@"Количество заметок в регламентном отчете: %d", [dataViewController notesCount]);
// Задаем время создания заметки,в качестве текущего указываем время 12:00:00
NSDateComponents *components = [NSDateComponents new];
[components setHour:12];
[components setMinute:0];
[components setSecond:0];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:components];
// Задаем точку, в которой будет создана заметка
CGPoint point = CGPointMake(50, 100);
// Добавляем заметку в регламентный отчет
[dataViewController addNote:point withText:@"Заметка" timestamp:[date timeIntervalSince1970]];
// Выводим в консоль среды разработки количество заметок в регламентном отчете после добавления заметки
NSLog(@"Количество заметок после добавления заметки: %d", [dataViewController notesCount]);
// Создаем делегат просмотрщика отчетов
ProceduralDelegateImpl *proceduralDelegateImpl = [[ProceduralDelegateImpl alloc] initWithProceduralReportDataViewController:dataViewController];
// Открываем заметку с указанным индексом
[proceduralDelegateImpl openNoteAtIndex:0];
// Вызываем после паузы метод, продолжающий выполнение примера
[self performSelector:@selector(continueExample:) withObject:proceduralDelegateImpl afterDelay:5];
}
}
Также необходимо в классе ViewController добавить следующие методы вместе с их реализацией:
// Продолжает выполнение примера
- (void) continueExample:(ProceduralDelegateImpl *)proceduralDelegateImpl
{
// Получаем заметку по указанному индексу
Note *note = [proceduralDelegateImpl.dataViewController noteByIndex:0];
// Скрываем заметку
[proceduralDelegateImpl cancelNote];
// Изменяем заметку
[proceduralDelegateImpl.dataViewController editNoteAtIndex:0 point:CGPointMake(150, 100) text:@"Отредактированная заметка" timestamp:[note timestamp]];
// Открываем измененную заметку
[proceduralDelegateImpl openNoteAtIndex:0];
// Удаляем заметку после паузы
[self performSelector:@selector(deleteNote:) withObject:proceduralDelegateImpl afterDelay:5];
}
// Удаляет заметку
- (void) deleteNote:(ProceduralDelegateImpl *)proceduralDelegateImpl
{
// Скрываем заметку
[proceduralDelegateImpl cancelNote];
// Удаляем заметку по указанному индексу
[proceduralDelegateImpl.dataViewController removeNoteWithIndex:0];
// Выводим в консоль среды разработки количество заметок в регламентном отчете после удаления заметки
NSLog(@"Количество заметок после удаления заметки: %d", [proceduralDelegateImpl.dataViewController notesCount]);
}
В результате выполнения примера на экране мобильного устройства будет отображена заметка, добавленная в регламентный отчет:

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

Спустя еще 5 секунд отображенная заметка будет скрыта и удалена, в результате чего регламентный отчет примет свой первоначальный вид. Также в консоли среды разработки будет выведено количество заметок в регламентном отчете после добавления и удаления новой заметки:
Количество заметок в регламентном отчете: 0
Количество заметок после добавления заметки: 1
Количество заметок после удаления заметки: 0
См. также: