Параметры строки в таблице с экспандерами

Описание: Параметры строки в таблице. Используется в источнике данных для формирования массива строк, которые содержат экспандер.

Файл «GridRow.h»

@interface GridRow : NSObject{
    NSMutableArray *children; // Массив дочерних строк
}
@property (nonatomic, readonly) NSString *title; // Заголовок строки
@property (nonatomic, readonly) NSArray *values; // Значение строки
@property (nonatomic, readonly) GridRow *parent; // Родительская строка
@property (nonatomic) BOOL isExpanded; // Признак того, что строка развёрнута
// Инициализирует строку по заголовку и данным
- (id)initWithHeader:(NSString *)header andData:(NSArray *)data;
// Инициализирует строку по заголовку, данным и родителю
- (id)initWithHeader:(NSString *)header andData:(NSArray *)data andParent:(GridRow *)parentRow;
// Возвращает дочерную строку по её индексу
- (GridRow *)childAtIndex:(NSInteger)index;
// Возвращает количество дочерних строк
- (NSInteger)childrenCount;
// Добавляет дочернюю строку
- (void)addChild:(GridRow *)row;
// Возвращает уровень строки в иерархии всех строк таблицы
- (NSInteger)level;
@end

Файл «GridRow.m»

#import "GridRow.h"
@implementation GridRow
@synthesize title, values, parent, isExpanded;
// Инициализирует строку по заголовку и данным
- (id)initWithHeader:(NSString *)header andData:(NSArray *)data{
    if ((self = [super init])) {
        title = [[NSString stringWithString:header] retain];
        values = [[NSArray arrayWithArray:data] retain];
        parent = nil;
        isExpanded = NO;
        return self;
    }
    else
    return nil;
}
// Инициализирует строку по заголовку, данным и родителю
- (id)initWithHeader:(NSString *)header andData:(NSArray *)data andParent:(GridRow *)parentRow {
    if ((self = [self initWithHeader:header andData:data])) {
        parent = parentRow;
        [parent addChild:self];
        return self;
    }
    else
    return nil;
}
// Возвращает дочерную строку по её индексу
- (GridRow *)childAtIndex:(NSInteger)index {
    if (children && index < [children count ])
    return [children objectAtIndex:index];
    else
    return nil;
}
// Возвращает количество дочерних строк
- (NSInteger)childrenCount {
    return [children count];
}
// Добавляет дочернюю строку
- (void)addChild:(GridRow *)row {
    if (!children)
    children = [[NSMutableArray new] retain];
    [children addObject:row];
}
// Возвращает уровень строки в иерархии всех строк таблицы
- (NSInteger)level {
    if (parent)
    return [parent level] + 1;
    else
    return 0;
}
// Устанавливает признак того, развёрнута ли строка таблицы
- (void)setIsExpanded:(BOOL)expanded {
    if ([children count])
    isExpanded = expanded;
    else
    isExpanded = NO;
}
- (void)dealloc {
    [title release];
    [values release];
    [children release];
    [super dealloc];
}
@end

См. также:

Создание таблицы с экспандерами