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

Требования к операционной системе: 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: contr];
// Добавляем заголовок секции
if([customController getSectionHeader:0] == nil) {
    [customController addSectionHeader:@"Числа" forSection:0];
}
// Создаём ячейку с редактором текста
SettingsTextInputCell *textInputCell1 = [SettingsTextInputCell textInputCellWithTitle:@"Число 1:" delegate:customController key:@"NUMBER1"];
// Сохраняем в делегате изменения при каждой модификации текста
[textInputCell1 setContinuousUpdating:YES];
// Устанавливаем тип вспомогательного индикатора
[textInputCell1 setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton];
// Устанавливаем выравнивание текста по центру ячейки
NSArray *textAlignmentModes = [customController settingsValuesEnumForKey:@"NUMBER1"];
NSTextAlignment alignment = (NSTextAlignment)[(NSNumber *)[textAlignmentModes objectAtIndex: 1] integerValue];
[textInputCell1 setTextInputTextAlignment: alignment];
// Устанавливаем левый внутренний отступ
[textInputCell1 setLeftPadding: 10.0];
// Добавляем ячейку в меню
[customController addCell:textInputCell1 atRow:0 inSection:0 withSelector:nil];
// Устанавливаем значение
[customController setSettingsValue:@"3" forKey:@"NUMBER1"];
NSLog(@"Минимальное значение ячейки NUMBER1: %@", (NSString *)[customController settingsMinValueForKey: @"NUMBER1"]);
// Добавляем обработчик нажатия на кнопку перехода к дочерней ячейке меню настроек
NSIndexPath *textInputCellPath = [NSIndexPath indexPathForRow:0 inSection:0];
NSString *textInputCellSelectorString = NSStringFromSelector(@selector(detailDisclosureButtonClicked:));
[[customController accessorySelectors] setObject:textInputCellSelectorString forKey:textInputCellPath];
// Создаём ячейку с редактором текста
SettingsTextInputCell *textInputCell2 = [[SettingsTextInputCell alloc] initWithTitle:@"2" delegate:customController key:@"NUMBER2"];
// Дополняем заголовок
[[textInputCell2 textLabel] setText: [NSString stringWithFormat: @"Число %@:", [textInputCell2 title]]];
// Устанавливаем значение
[[textInputCell2 textInput] setText:@"13"];
// Добавляем ячейку в меню
[customController addCell:textInputCell2 atRow:1 inSection:0 withSelector:nil];
NSLog(@"Максимальное значение ячейки NUMBER2: %@", (NSString *)[customController settingsMaxValueForKey: @"NUMBER2"]);
// Создаём базовую ячейку для меню настроек
SettingsCell *settingsCell = [SettingsCell cellWithTitle:@"5" delegate: customController key: @"NUMBER3"];
[customController addCell:settingsCell atRow:2 inSection:0 withSelector:nil];
NSLog(@"Желаемая высота ячейки NUMBER3: %f", [settingsCell height]);
// Добавляем обработчик нажатия на данную ячейку
NSIndexPath *settingsCellPath = [NSIndexPath indexPathForRow:2 inSection:0];
NSString *selectorString = NSStringFromSelector(@selector(settingsCellClick:));
[[customController selectors] setObject:selectorString forKey:settingsCellPath];
// Создаём ячейку с детальным описанием, содержащим название класса данной ячейки, и значком
SettingsDetailTextTableViewCell *detailTextTableViewCell = [SettingsDetailTextTableViewCell detailTextCellWithTitle:@"7" delegate:nil key:nil];
[detailTextTableViewCell setDelegate: customController];
// Устанавливаем ключ данных
[detailTextTableViewCell setKey: @"NUMBER4"];
// Перезагружаем данные
[detailTextTableViewCell reloadData];
[customController addCell:detailTextTableViewCell atRow:3 inSection:0 withSelector:nil];
NSLog(@"Дополнительное описание для ячейки NUMBER4: %@", [customController settingsTextForKey:@"NUMBER4" withValue:nil]);
NSLog(@"Признак отображения ячейки NUMBER4: %d", [customController settingsControlVisibleForKey: @"NUMBER4"]);
NSLog(@"Признак разрешения на редактирование ячейки NUMBER4: %d", [customController settingsControlEnabledForKey: @"NUMBER4"]);
// Отображаем представление
UIView *customView = [customController view];
[customView setFrame:CGRectMake(50, 50, 300, 200)];
// Обновляем размеры представления контроллера
[customController updateSize];
[self.view addSubview: customView];

В результате выполнения примера была отображена секция с заголовком «Числа», содержащая четыре ячейки. Первая и вторая из них предназначены для редактирования текста, четвёртая содержит дополнительное описание (наименование соответствующего ей класса) и значок:

В консоли среды разработки были выведены минимальное значение ячейки с ключом NUMBER1 и максимальное значения для ячейки NUMBER2. Для ячейки с ключом NUMBER3 определена желаемая высота, а для ячейки с ключом NUMBER4 - дополнительное описание, содержащее название класса данной ячейки, признаки её отображения и разрешения на редактирования:

Минимальное значение ячейки NUMBER1: 3

Максимальное значение ячейки NUMBER2: 13

Желаемая высота ячейки NUMBER3: 44.000000

Дополнительное описание для ячейки NUMBER4: SettingsDetailTextTableViewCell

Признак отображения ячейки NUMBER4: 1

Признак разрешения на редактирование ячейки NUMBER4: 1

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

Переход из ячейки (0, 0)

Выбрана ячейка (2, 0)

См. также:

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