Требования к операционной системе: 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];
}
}
В результате выполнения примера на экране мобильного устройства будет отображен экспресс-отчет, содержащий таблицу, для которой отображено всплывающее окно настроек экспресс-отчета, а также изменены высота и ширина для указанных строк и столбцов:

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

См. также: