Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описывается подсчет количества результатов поиска по регламентному отчету. После запуска примера выполняются следующие операции:
извлекается представление просмотрщика регламентных отчетов;
для просмотрщика регламентных отчетов создается и устанавливается делегат для поиска по PDF-документу с отправлением уведомлений о событиях поиска;
создается новый делегат просмотрщика отчетов с методами для получения информации о результатах поиска;
новый делегат просмотрщика отчетов подписывается на уведомления делегата поиска;
осуществляется поиск заданной строки в регламентном отчете с помощью представления просмотрщика регламентных отчетов;
осуществляется подсчет количества результатов поиска по регламентному отчету с помощью созданного делегата просмотрщика отчетов;
с помощью созданного делегата просмотрщика отчетов выполняются действия, необходимые при завершении поиска по регламентному отчету;
извлекается количество результатов поиска по регламентному отчету с помощью созданного делегата просмотрщика отчетов.
В базовый пример «Отображение регламентного отчёта» необходимо добавить следующие файлы:
ProceduralDelegateImplForSearch.h/.m. Делегат просмотрщика отчетов с методами для получения информации о результатах поиска;
SearchDelegateWithNotifications.h/.m. Делегат для поиска по PDF-документу с отправлением уведомлений о событиях поиска.
Для выполнения примера необходимо создать класс делегата просмотрщика отчетов, в котором реализованы методы протокола <ProceduralDelegate> для получения информации о результатах поиска, класс делегата для поиска по 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-документу
SearchDelegateWithNotifications *searchDelegate = [[SearchDelegateWithNotifications alloc] init];
// Устанавливаем делегат поиска в просмотрщике регламентных отчетов
[reportDataViewControllerBase setSearchDelegate:searchDelegate];
// Создаем делегат просмотрщика отчетов
ProceduralDelegateImplForSearch *proceduralDelegateImpl = [[ProceduralDelegateImplForSearch alloc] init];
// Сбрасываем результаты поиска
[proceduralDelegateImpl reset];
// Подписываем делегат просмотрщика отчетов на уведомления делегата поиска
[[NSNotificationCenter defaultCenter] addObserver:proceduralDelegateImpl selector:@selector(searchFinished) name:@"searchFinished" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:proceduralDelegateImpl selector:@selector(resultsCountChanged) name:@"resultsCountChanged" object:nil];
// Осуществляем поиск заданной строки в регламентном отчете
reportDataViewControllerBase.inSearching = YES;
[reportDataViewControllerBase searchText: @"ia"];
// Вызываем после паузы метод, продолжающий выполнение примера
// Во время паузы должно завершиться исполнение потока, в котором осуществляется поиск заданной строки
[self performSelector:@selector(continueExample:) withObject:proceduralDelegateImpl afterDelay:3];
}
}
}
Также необходимо в классе ViewController добавить следующий метод вместе с его реализацией:
// Продолжает выполнение примера
- (void) continueExample: (ProceduralDelegateImplForSearch *) proceduralDelegateImpl
{
// Выводим в консоль среды разработки количество результатов поиска по регламентному отчету
NSLog(@"Количество совпадений с заданной строкой: %d",[proceduralDelegateImpl searchResultsCount]);
}
В результате выполнения примера в консоли среды разработки будет выведено сообщение о завершении поиска, а также количество результатов поиска регламентному отчету:
Поиск завершен
Количество совпадений с заданной строкой: 6
См. также: