Создание заметки в регламентном отчёте

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

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

Описание

В данном примере описывается создание заметки в регламентном отчёте и её отображение в диалоге редактирования.

Исходный код

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

MAProceduralReportDataViewController<MADataViewControllerProtocol> *contr =
(MAProceduralReportDataViewController<MADataViewControllerProtocol> *)[(MAProceduralReportViewController *)m_controller activeDataViewController];
// Создаём новую заметку
Note *note = [Note new];
[note initWithText:@"Новая" offset:CGPointMake(10, 20)];
[note setText:[NSString stringWithFormat:@"%@ заметка", [note text]]];
[note setOffset: CGPointMake([note offset].x * 10, [note offset].y * 10)];
[note setPage:[contr pagesCount] - 1];
// В качестве текущего указываем время 12:33:05
NSDateComponents *comps = [NSDateComponents new];
[comps setHour:12];
[comps setMinute:33];
[comps setSecond:5];
NSCalendar *gregorian = [NSCalendar currentCalendar];
NSDate *date = [gregorian dateFromComponents:comps];
// Устанавливаем время последнего изменения заметки
[note setTimestamp:[date timeIntervalSince1970]];
// Определяем диалог для создания и редактирования заметки
AddNoteDialog *noteDialog = [[AddNoteDialog alloc] init];
[noteDialog setDelegate:contr]; // Делегат
[noteDialog setPoint:[note offset]]; // Расположение заметки
[noteDialog setTimestamp:[note timestamp]]; // Время создания заметки
[noteDialog setText:[note text]]; // Текст заметки
[noteDialog setMode: kNoteDialogNewNote]; // Редактируем заметку
[noteDialog setNoteIndex:1]; // Индекс заметки в массиве всех заметок
// Обновляем диалог
[noteDialog refresh];
// Устанавливаем размер содержимого в всплывающем окне
[noteDialog setContentSizeForViewInPopover:CGSizeMake(300.0, 200.0)];
// Создаём всплывающее окно
UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:noteDialog] autorelease];
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:navController];
popoverController.delegate = contr;
// Изменяем текущую страницу регламентного отчёта
[contr jumpToPage:[note page]];
// Определяем содержимое всплывающего окна
CGPoint offset;
// Определяем отступы всплывающего окна
offset.x = note.offset.x * [contr pdfView].scrollView.zoomScale;
float pageOffset = [note page]*[contr pdfView].scrollView.contentSize.height / [contr pagesCount];
offset.y = (note.offset.y + pageOffset)* [contr pdfView].scrollView.zoomScale;
// Отображаем всплывающее окно
[popoverController presentPopoverFromRect:CGRectMake(offset.x, offset.y, 1, 1) inView:[contr pdfView].scrollView
permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

В результате выполнения примера на последней странице регламентного отчёта была создана и отображена заметка. Она расположена в точке с координатами (100, 200), имеет время изменения 12:33:05 и содержит текст «Новая заметка»:

Теперь сбросим текст и время последнего редактирования заметки, добавив к примеру следующую строку кода:

[noteDialog reset];

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

См. также:

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