Делегат просмотрщика отчетов

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

Файл «ProceduralReportImpl.h»

#import <Foundation/Foundation.h>
#import "MAProceduralDelegate.h"
#import "MANotesViewController.h"
#import "MAProceduralReportDataViewController.h"
// Класс, реализующий протокол делегата просмотрщика отчетов и протокол для отображений, которые открываются с помощью всплывающих окон
@interface ProceduralDelegateImpl : NSObject<ProceduralDelegate, PopoverContainedControllerProtocol>
// Представление просмотрщика листов регламентного отчета
@property (nonatomic, retain) MAProceduralReportDataViewController *dataViewController;
// Всплывающее окно
@property (nonatomic, assign) UIPopoverController *popover;
// Создает и инициализирует экземпляр класса и устанавливает значение представления просмотрщика листов регламентного отчета
- (id) initWithProceduralReportDataViewController: (MAProceduralReportDataViewController *)dataViewController;
// Скрывает заметку без сохранения изменений
- (void)cancelNote;
// Открывает заметку для изменения
// index - индекс заметки
- (void)openNoteAtIndex:(int)index;
@end

Файл «ProceduralReportImpl.m»

#import "ProceduralDelegateImpl.h"
@implementation ProceduralDelegateImpl
// Создает и инициализирует экземпляр класса и устанавливает значение представления просмотрщика листов регламентного отчета
- (id) initWithProceduralReportDataViewController: (MAProceduralReportDataViewController *)dataViewController
{
    self = [super init];
    if (self)
    {
        // Устанавливаем значение представления просмотрщика листов регламентного отчета
        _dataViewController = dataViewController;
        // Устанавливаем пустое значение для всплывающего окна
        _popover = nil;
    }
    return self;
}
// Открывает заметку для изменения
// index - индекс заметки
- (void)openNoteAtIndex:(int)index
{
    // Получаем заметку по ее индексу
    Note *note = [_dataViewController noteByIndex:index];
    // Определяем диалог для создания и редактирования заметки
    AddNoteDialog *noteDialog = [[AddNoteDialog alloc] init];
    [noteDialog setDelegate:_dataViewController]; // Делегат
    [noteDialog setPoint: [note offset]]; // Расположение заметки
    [noteDialog setTimestamp:[note timestamp]]; // Время создания заметки
    [noteDialog setText:[note text]]; // Текст заметки
    [noteDialog setMode: kNoteDialogNewNote]; // Редактируем заметку
    [noteDialog setNoteIndex:index]; // Индекс заметки в массиве всех заметок
    // Обновляем диалог
    [noteDialog refresh];
    // Устанавливаем размер содержимого в всплывающем окне
    [noteDialog setContentSizeForViewInPopover:CGSizeMake(300.0, 200.0)];
    // Создаем всплывающее окно
    UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:noteDialog] autorelease];
    UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:navController];
    popoverController.delegate = _dataViewController;
    // Отображаем всплывающее окно
    [popoverController presentPopoverFromRect:CGRectMake([note offset].x, [note offset].y, 1, 1) inView:[_dataViewController pdfView].scrollView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    // Сохраняем всплывающее окно в свойстве popover
    _popover = popoverController;
}
// Скрывает заметку без сохранения изменений
- (void)cancelNote
{
    // Проверяем, было ли отображено всплывающее окно
    if(_popover != nil)
    {
        // Скрываем всплывающее окно
        [_popover dismissPopoverAnimated:NO];
        // Устанавливаем пустое значение для всплывающего окна
        _popover = nil;
    }
}
@end

См. также:

Работа с заметками в регламентном отчете