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

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

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

Описание

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

Исходный код

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

// Получаем контроллер для работы с регламентным отчётом
MAProceduralReportDataViewController<MADataViewControllerProtocol> *contr = (MAProceduralReportDataViewController<MADataViewControllerProtocol> *)[(MAProceduralReportViewController *)m_controller activeDataViewController];
// Создаём закладку
Bookmark *bookmark = [[Bookmark new] autorelease];
// Определяем наименование закладки и её расположение
[bookmark initWithName:@"Закладка 1" offset:CGPointMake(150, 200)];
// Привязываем закладку к последней странице
[bookmark setPage: [contr pagesCount] - 1];
// Определяем новое расположение закладки с учётом заданной страницы
CGPoint offset;
offset.x = [bookmark offset].x;
float pageOffset = [bookmark page]*[contr pdfView].scrollView.contentSize.height / [contr pagesCount];
offset.y = ([bookmark offset].y + pageOffset)* [contr pdfView].scrollView.zoomScale;
[bookmark setOffset:offset];
// Добавляем к наименованию закладки текущее время
NSDateFormatter *dateFormat = [[NSDateFormatter new] autorelease];
[dateFormat setDateFormat:@"HH:mm:ss"];
[bookmark setName:[NSString stringWithFormat:@"%@ %@", [bookmark name], [dateFormat stringFromDate: [NSDate date]]]];
// Создаём коллекцию закладок
NSMutableArray *bookmarks = [[NSMutableArray new] autorelease];
[bookmarks addObject:bookmark];
// Устанавливаем новую коллекцию закладок
[(MAProceduralReportDataViewController*)contr setValue:bookmarks forKeyPath:@"currentDocument.bookmarks"];
// Переходим к созданной закладке
[(MAProceduralReportDataViewController*)contr openBookmark:0];
// Создаём контроллер для выбора закладок
BookmarksViewController *bookmarksViewCtrl = [[BookmarksViewController alloc] initWithStyle:UITableViewStylePlain];
// Устанавливаем делегат для просмотра отчётов
[bookmarksViewCtrl setDelegate:contr];
// Устанавливаем размер окна для выбора закладок
[bookmarksViewCtrl setContentSizeForViewInPopover: CGSizeMake(250, 300)];
// Получаем представление данных в виде таблицы с закладками
UITableView *tableView = [bookmarksViewCtrl tableView];
// Определяем путь к ячейке с закладкой
NSIndexPath *indexPath1 = [NSIndexPath indexPathForRow:0 inSection:0];
// Получаем ячейку с закладкой
BookmarkTableViewCell *cell1 = (BookmarkTableViewCell*)[bookmarksViewCtrl tableView:tableView cellForRowAtIndexPath:indexPath1];
// Получаем текстовое поле в ячейке
UITextField *textField1 = (UITextField *)[cell1 valueForKey:@"textField"];
NSLog(@"Наименование закладки: %@", textField1.text);
// Меняем наименование закладки
[[cell1 delegate] bookmarkCell:cell1 changeTitle:@"Закладка 2"];
// Повторно получаем ячейку с закладкой и соответствующее текстовое поле
BookmarkTableViewCell *cell2 = (BookmarkTableViewCell*)[bookmarksViewCtrl tableView:tableView cellForRowAtIndexPath:indexPath1];
UITextField *textField2 = (UITextField *)[cell2 valueForKey:@"textField"];
NSLog(@"Наименование закладки: %@", textField2.text);
// Отредактируем текст в поле ячейки, соответветствующей закладке
[cell2 setTitle:@"Закладка 3"];
UITextField *textField3 = (UITextField *)[cell2 valueForKey:@"textField"];
NSLog(@"Наименование закладки: %@", textField3.text);
// Запрещаем редактирование текста закладки
[cell2 setEditingStyle:NO];
// Отображаем таблицу с закладками в всплывающем окне
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:bookmarksViewCtrl];
[popoverController presentPopoverFromRect:CGRectMake(bookmark.offset.x + 50, bookmark.offset.y + 50, 20, 30) inView:[contr pdfView].scrollView permittedArrowDirections:NULL animated:YES];

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

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

Наименование закладки: Закладка 1 09:34:06

Наименование закладки: Закладка 2

Наименование закладки: Закладка 3


Причём в первый раз было изменено название самой закладки, а во второй раз - текст ячейки, соответствующей данной закладке. Если мы разрешим редактирование закладки, то есть будем вызывать метод setEditingStyle c параметром YES, то последнее изменение будет игнорировано:

См. также:

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