Описание: класс, реализующий протокол делегата просмотрщика отчетов и протокол для отображений, которые открываются с помощью всплывающих окон.
#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
#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
См. также: