Работа с постоянными ключами

Требования к операционной системе: 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;
                            }
                        }
                    }
                }
            }
        }
    }
}

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

См. также:

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