Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приёмы работы с ячейками и секциями меню настроек. После запуска примера выполняются следующие операции:
отображаются шесть секций с заголовками, соответствующими названиям классов ячеек;
отображается ячейка с переключателем;
отображается ячейка с переключателем и детальным описанием;
отображается ячейка с редактором значений в виде счётчика;
отображается ячейка с окрашенным квадратом;
отображается ячейка с флажком и окрашенным квадратом;
отображается ячейка с флажком и редактором значений в виде счётчика;
флажки для второй и пятой ячеек включаются, для счётчиков третьей и шестой ячеек устанавливаются новые значения;
в консоли среды разработки выводятся дополнительное описание для второй ячейки и цвет окрашенного квадрата для пятой ячейки.
В базовый пример «Отображение экспресс-отчёта» необходимо добавить следующий файл:
ElementsViewContoller.h/.m. Контроллер для работы с настройками меню в формате «ключ-значение».
Для выполнения примера необходимо разместить в теле метода 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]];
В результате выполнения примера в меню настроек были отображены шесть секций с заголовками, соответствующими названиям классов ячеек. Каждая секция содержит одну из следующих ячеек:
с переключателем (класс SettingsSwitchTableViewCell);
с переключателем и детальным описанием (класс SettingsDetailCheckmarkedCell);
с редактором значений в виде счётчика (класс SettingsSpinnerTableViewCell);
с окрашенным квадратом (класс SettingsColorTableViewCell);
с флажком и окрашенным квадратом (класс SettingsCheckmarkedColorCell);
с флажком и редактором значений в виде счётчика (класс SettingsCheckmarkedSpinnerCell).
Меню настроек после выполнения примера:

Флажки для второй и пятой ячеек сняты. Для счётчиков третьей и шестой ячеек установлены значения 5 и 2 соответственно.
В консоли среды разработки были выведены текущее значение переключателя для первой ячейки, дополнительное описание второй ячейки и цвет окрашенного квадрата у пятой ячейки:
Текущее значение переключателя: 1
Дополнительная информация: Заголовок таблицы
Цвет окрашенного квадрата: #00FF00
См. также: