Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы поиска текста в регламентном отчете. После запуска примера выполняются следующие операции:
извлекается представление просмотрщика листов регламентного отчета;
осуществляется проверка доступности поиска текста;
создается делегат поиска по PDF-документу;
созданный делегат задается в качестве делегата поиска для просмотрщика регламентных отчетов;
устанавливается признак того, находится ли просмотрщик регламентных отчетов в режиме поиска;
осуществляется поиск заданной строки в регламентном отчете;
найденные совпадения строк и завершение поиска обрабатываются с помощью созданного делегата поиска по PDF-документу;
осуществляется прерывание поиска заданной строки;
создается представление результатов поиска;
для представления результатов поиска задается делегат просмотрщика документов.
В базовый пример «Отображение регламентного отчёта» необходимо добавить следующий файл:
SearchDelegate.h/.m. Делегат для поиска по PDF-документу.
Для выполнения примера необходимо создать класс делегата для поиска по PDF-документу, в котором реализованы действия, которые необходимо произвести при обнаружении заданного текста и завершении поиска, а также добавить заголовочный файл класса в исходный код класса 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;
// Получаем представление просмотрщика регламентных отчетов
MAProceduralReportDataViewControllerBase *reportDataViewControllerBase = (MAProceduralReportDataViewControllerBase *)dataViewController;
// Проверяем, доступен ли поиск текста
if([reportDataViewControllerBase isSearchAvaliable] == YES)
{
// Создаем делегат поиска по PDF-документу
SearchDelegate *searchDelegate = [[SearchDelegate alloc] init];
// Устанавливаем делегат поиска в просмотрщике регламентных отчетов
[reportDataViewControllerBase setSearchDelegate:searchDelegate];
// Устанавливаем признак того, находится ли просмотрщик в режиме поиска
[reportDataViewControllerBase setInSearching:YES];
// Осуществляем поиск заданной строки в регламентном отчете
[reportDataViewControllerBase searchText: @"Spain"];
}
}
}
В результате выполнения примера в момент обнаружения заданного текста в консоли среды разработки будет выведено сообщение с номером страницы регламентного отчета, на которой была найдена заданная строка:
Заданный текст найден на странице 3
После завершения поиска в консоли среды разработки будет выведено соответствующее сообщение:
Поиск текста завершен
Далее необходимо в теле метода executeExample разместить перед строками:
// Осуществляем поиск заданной строки в регламентном отчете [reportDataViewControllerBase searchText: @"Spain"];
следующий код:
// Останавливаем поиск [reportDataViewControllerBase stopSearching];
В результате выполнения обновленного примера поиск будет остановлен, поэтому сообщение с номером страницы регламентного отчета, на которой была найдена заданная строка, не будет выведено в консоли среды разработки.
Заменим в методе executeExample строки кода в блоке
if([reportDataViewControllerBase isSearchAvaliable] == YES)
на следующий код:
// Создаем представление результатов поиска PdfSearchResultsViewController *searchResultsController = [[PdfSearchResultsViewController alloc] init]; [searchResultsController setContentSizeForViewInPopover:CGSizeMake(300.0, 200.0)]; // Задаем для представления результатов поиска делегат просмотрщика документов [searchResultsController setDelegate:dataViewController]; // Создаем всплывающее окно UINavigationController *navController =[[[UINavigationController alloc] initWithRootViewController: searchResultsController] autorelease]; UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:navController]; popoverController.delegate = dataViewController; // Устанавливаем делегат поиска в просмотрщике регламентных отчетов [reportDataViewControllerBase setSearchDelegate:searchResultsController]; // Устанавливаем признак того, находится ли просмотрщик в режиме поиска [reportDataViewControllerBase setInSearching:YES]; // Осуществляем поиск заданной строки в регламентном отчете [reportDataViewControllerBase searchText: @"Togo"]; // Отображаем всплывающее окно [popoverController presentPopoverFromRect:CGRectMake(100, 100, 1, 1) inView:[dataViewController pdfView].scrollView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
В результате выполнения этого примера на экране мобильного устройства будет показан регламентный отчет, в котором отображено представление результатов поиска с номерами страниц, на которых были найдены совпадения с заданным текстом.

См. также: