Поиск текста в регламентном отчете

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

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

Описание

В данном примере описываются некоторые приемы поиска текста в регламентном отчете. После запуска примера выполняются следующие операции:

Необходимые файлы

В базовый пример «Отображение регламентного отчёта» необходимо добавить следующий файл:

Исходный код

Для выполнения примера необходимо создать класс делегата для поиска по 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];

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

См. также:

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