Работа с ячейками и с секциями в меню настроек

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

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

Описание

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

Необходимые файлы

В базовый пример «Отображение экспресс-отчёта» необходимо добавить следующий файл:

Необходимые файлы

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

// Удаляем все дочерние представления окна
NSArray *subviews = [self.view subviews];
for (UIView *subView in subviews) {
    [subView removeFromSuperview];
}
// Получаем контроллер для отображения экспресс-отчёта
MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
// Создаём пользовательский контроллер
ElementsViewController *customController = [[ElementsViewController alloc] initWithDelegate: nil withStyle:UITableViewStyleGrouped];
// Устанавливаем делегат
[customController setDelegate: customController];
// Устанавливаем ширину представления контроллера
[customController setControllerWidth: 320];
// Получаем справочник с заголовками секций
NSMutableDictionary *sectionHeaders = [customController sectionHeaders];
// Добавляем заголовки для секций
[sectionHeaders addEntriesFromDictionary: [customController settingsValuesDictForKey:@"CustomController"]];
// Создаём ячейку с переключателем
SettingsSwitchTableViewCell *switchTableViewCell = [SettingsSwitchTableViewCell switchCellWithTitle:@"Таблица" delegate:contr key:nil];
// Добавляем ячейку
[customController addCell:switchTableViewCell inSection:0 withSelector:nil];
// Перезагружаем ячейки в секции
[customController reloadCellsInSection:0];
// Переводим переключатель в положение «Включено»
[switchTableViewCell switchToStateOn:YES];
NSLog(@"Текущее значение переключателя: %d", [[switchTableViewCell switchControl] isOn]);
SettingsDetailCheckmarkedCell *captionCell = [SettingsDetailCheckmarkedCell detailCheckmarkedCellWithTitle:NSLocalizedString(@"Caption", @"") delegate:customController key:@"CAPTION" textKey:@"DETAIL_CAPTION"];
NSLog(@"Дополнительная информация: %@", [customController settingsValueForKey: [captionCell textKey]]);
// Добавляем ячейку в контроллер
[customController addCell:captionCell inSection:1 withSelector:nil];
// Устанавливаем логическое значение для ячейки
[customController setSettingsValue:[NSNumber numberWithBool: YES] forKey:@"CAPTION"];
// Отображаем кнопку для перехода к дочерней ячейке меню настроек
[customController setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton forCellAtRow:0 inSection:1];
// Обрабатываем событие нажатия на эту кнопку
[customController addDisclosureSelector:@selector(detailDisclosureButtonClicked:) forCellAtRow:0 inSection:1];
// Создаём ячейку с редактором значений в виде счётчика
SettingsSpinnerTableViewCell *sizeCell = [SettingsSpinnerTableViewCell spinnerCellWithTitle:@"Размер" delegate: customController key:@"SIZE"];
// Добавляем ячейку в контроллер
[customController addCell:sizeCell inSection:2 withSelector:nil];
// Устанавливаем логическое значение для ячейки
[customController setSettingsValue:[NSNumber numberWithInt: 5] forKey:@"SIZE"];
// Создаём ячейку с окрашенным квадратом
SettingsColorTableViewCell *colorCell = [SettingsColorTableViewCell colorCellWithTitle:NSLocalizedString(@"Color", @"") delegate:customController key:@"COLOR"];
// Добавляем ячейку в контроллер
[customController addCell:colorCell inSection:3 withSelector:nil];
// Устанавливаем заливку для квадрата в ячейке
[customController setSettingsValue:[UIColor colorWithRed:255 green:0 blue:0 alpha:0.5] forKey:[colorCell key]];
// Создаём ячейку с флажком и окрашенным квадратом
SettingsCheckmarkedColorCell *checkmarkedColorCell = [SettingsCheckmarkedColorCell checkmarkedColorCellWithTitle:@"Цвет заливки" delegate:customController key:@"CHECK" colorKey:@"CHECK_COLOR"];
[customController addCell:checkmarkedColorCell atRow:0 inSection:4 withSelector:nil];
// Устанавливаем логическое значение для ячейки
[customController setSettingsValue:[NSNumber numberWithBool: YES] forKey:@"CHECK"];
// Определяем HEX-код цвета квадрата
UIColor *color = (UIColor *)[customController settingsValueForKey:[checkmarkedColorCell colorKey]];
const CGFloat *components = CGColorGetComponents(color.CGColor);
CGFloat r = components[0];
CGFloat g = components[1];
CGFloat b = components[2];
NSString *hexString=[NSString stringWithFormat:@"%02X%02X%02X", (int)(r * 255), (int)(g * 255), (int)(b * 255)];
NSLog(@"Цвет окрашенного квадрата: #%@", hexString);
// Создаём ячейку с флажком и редактором значений в виде счётчика
SettingsCheckmarkedSpinnerCell *borderWeightCell = [SettingsCheckmarkedSpinnerCell checkmarkedSpinnerCellWithTitle:NSLocalizedString(@"Толщина границы", @"") delegate: customController key:@"BORDER_WEIGHT" spinnerKey:@"SPINNER_BORDER_WEIGHT"];
// Добавляем ячейку в контроллер
[customController addCell:borderWeightCell inSection:5 withSelector:nil];
// Устанавливаем значения для ячейки
[customController setSettingsValue:[NSNumber numberWithBool: YES] forKey:@"BORDER_WEIGHT"];
[customController setSettingsValue:[NSNumber numberWithFloat: 2] forKey: [borderWeightCell spinnerKey]];
// Устанавливаем размеры представления контроллера
[customController historyUpdatedFromController];
// Отображаем представление
[self.view addSubview: [customController view]];

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

Меню настроек после выполнения примера:

Флажки для второй и пятой ячеек сняты. Для счётчиков третьей и шестой ячеек установлены значения 5 и 2 соответственно.

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

Текущее значение переключателя: 1
Дополнительная информация: Заголовок таблицы

Цвет окрашенного квадрата: #00FF00

См. также:

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