Требования к операционной системе: 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;
// Получаем источник данных таблицы
GridDataViewDatasource *grid = [gridController gridDatasource];
// Получаем постоянный ключ строки
MAGridDataSourcePersistentKey *rowPersistentKey = [grid rowPersistentKeyByNumber:1];
// Получаем постоянный ключ столбца
MAGridDataSourcePersistentKey *columnPersistentKey = [grid columnPersistentKeyByNumber:1];
// Получаем копию постоянного ключа столбца
id<MAGridDataSourcePersistentKeyProtocol> persistentKey = [columnPersistentKey copyWithZone:[columnPersistentKey zone]];
// Объединяем копию постоянного ключа столбца с постоянным ключом строки
[persistentKey joinWith:rowPersistentKey];
// Вызываем метод для выделения ячейки
[self setSelectionForKey:persistentKey];
break;
}
}
Далее необходимо в классе ViewController добавить следующий метод вместе с его реализацией:
// Выделяет ячейку таблицы
-(void) setSelectionForKey: (id<MAGridDataSourcePersistentKeyProtocol>)key
{
// Получаем массив контроллеров представлений данных
NSArray *controllers =[m_controller dataViewControllers];
// Перебираем в цикле контроллеры представлений данных
for(NSObject *controller in controllers)
{
// Проверяем, является ли текущий контроллер контроллером представления данных в виде таблицы
if([controller isMemberOfClass:[MAGridDataViewController class]])
{
// Получаем объект контроллера представления данных в виде таблицы
MAGridDataViewController *gridController = (MAGridDataViewController *)controller;
// Получаем источник данных таблицы
GridDataViewDatasource *grid = [gridController gridDatasource];
// Получаем представление контроллера
UIView *view = [gridController view];
// Получаем массив вложенных представлений
NSArray *subviews = [view subviews];
// Перебираем в цикле вложенные представления
for(NSObject *subview in subviews)
{
// Проверяем, является ли текущее представление табличным представлением
if([subview isMemberOfClass:[NuGridView class]])
{
// Получаем объект табличного представления
NuGridView *gView = (NuGridView *)subview;
// Получаем количество столбцов таблицы
int columnCount = [grid gridViewColumnCount:gView];
// Получаем количество строк таблицы
int rowCount = [grid gridViewRowCount:gView];
// Перебираем в цикле строки таблицы
for(int i = 0; i < rowCount; i++)
{
// Перебираем в цикле столбцы таблицы
for(int j = 0; j < columnCount; j++)
{
// Получаем постоянный ключ строки
MAGridDataSourcePersistentKey *rowPersistentKey = [grid rowPersistentKeyByNumber:i];
// Получаем постоянный ключ столбца
MAGridDataSourcePersistentKey *columnPersistentKey = [grid columnPersistentKeyByNumber:j];
// Получаем копию постоянного ключа столбца
id<MAGridDataSourcePersistentKeyProtocol> persistentKey = [columnPersistentKey copyWithZone:[columnPersistentKey zone]];
// Объединяем копию постоянного ключа столбца с постоянным ключом строки
[persistentKey joinWith:rowPersistentKey];
// Проверяем полученный объединенный ключ на равенство заданному ключу
if([persistentKey isEqual:key])
{
// Выделяем ячейку и завершаем выполнение метода
[[gView controller] selectAreaFromRow:[gView rowWithNumber:i] column:[gView columnWithNumber:j] toRow:[gView rowWithNumber:i] column:[gView columnWithNumber:j]];
return;
}
}
}
}
}
}
}
}
В результате выполнения примера на экране мобильного устройства будет отображен экспресс-отчет, содержащий таблицу, для которой установлено выделение одной из ячеек:

См. также: