Работа с делегатом таблицы

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

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

Описание

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

Исходный код

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

// Получаем массив контроллеров представлений данных
NSArray *controllers =[m_controller dataViewControllers];
// Перебираем в цикле контроллеры представлений данных
for(NSObject *controller in controllers)
{
    // Проверяем, является ли текущий контроллер контроллером представления данных в виде таблицы
    if([controller isMemberOfClass:[MAGridDataViewController class]])
    {
        // Получаем объект контроллера представления данных в виде таблицы
        MAGridDataViewController *gridController = (MAGridDataViewController *)controller;
        // Получаем представление контроллера
        UIView *view = [gridController view];
        // Получаем массив вложенных представлений
        NSArray *subviews = [view subviews];
        // Перебираем в цикле вложенные представления
        for(NSObject *subview in subviews)
        {
            // Проверяем, является ли текущее представление табличным представлением
            if([subview isMemberOfClass:[NuGridView class]])
            {
                // Получаем объект табличного представления
                NuGridView *gView = (NuGridView *)subview;
                // Получаем объект делегата таблицы
                MAGridDelegate *gridDelegate = (MAGridDelegate *)[gView gridDelegate];
                // Получаем контроллер представления, связанного с делегатом
                MAGridDataViewController *controllerFromDelegate = [gridDelegate dataViewController];
                // Получаем делегат представления экспресс-отчета
                MAExpressAnalysisReportViewController *reportDelegate = (MAExpressAnalysisReportViewController *)[controllerFromDelegate delegate];
                // Получаем объект контроллера настроек экспресс-отчета
                BaseSettingsViewController *reportSettings = (BaseSettingsViewController *)[reportDelegate reportSettingsController];
                // Отображаем представление настроек экспресс-отчета
                [reportDelegate dataViewController:controllerFromDelegate showSettingsController:reportSettings fromView:gView];
                // Изменяем ширину столбца в таблице
                [gridDelegate widthChangeNeeded:150 forColumnWithKey:0];
                // Изменяем высоту строки в таблице
                [gridDelegate heightChangeNeeded:300 forRowWithKey:1];
                // Обновляем табличное представление
                [gView setNeedsLayout];
                // Вызываем после паузы метод, продолжающий выполнение примера
                [self performSelector: @selector(continueExample:) withObject:gridDelegate afterDelay:5];
            }
        }
    }
}

Также необходимо в классе ViewController  добавить следующий метод вместе с его реализацией:

// Продолжает выполнение примера
- (void) continueExample:(MAGridDelegate *)gridDelegate {
    // Скрываем всплывающую подсказку, отображенную для делегата таблицы
    if ([gridDelegate respondsToSelector:@selector(hidePopover)]) {
        [gridDelegate hidePopover];
    }
    if ([gridDelegate respondsToSelector:@selector(proxyDataSource)]) {
        // Получаем прокси-источник данных таблицы
        MAGridProxyDataSource *proxyDatasource =[gridDelegate proxyDataSource];
        // Устанавливаем признак того, будут ли отображаться спарклайны таблицы
        [proxyDatasource setSparklinesOn:YES];
    }
    if ([gridDelegate respondsToSelector:@selector(dataViewController)]) {
        // Обновляем табличное представление
        [[[gridDelegate dataViewController] view] setNeedsLayout];
    }
}

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

Через пять секунд после запуска примера  всплывающее окно настроек экспресс-отчета будет скрыто, а в таблице будет отображен столбец, содержащий спарклайны:

См. также:

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