Наиболее похожим на iPhone интерфейсом для форм будет групповое табличное представление. Это то, чего ожидает большинство пользователей после использования других приложений, которые используют сгруппированные табличные представления для добавления и редактирования структурированных данных.
Хорошей практикой является создание enum
(перечисления) для разделов и для строк внутри разделов, например ::10000 *
typedef enum {
kFormSectionFirstSection = 0,
kFormSectionSecondSection,
kFormSectionThirdSection,
kFormSections
} FormSection;
typedef enum {
kFormFirstSectionFirstRow = 0,
kFormFirstSectionSecondRow,
kFormFirstSectionRows
} FormFirstSectionRow;
...
В этом примере вы можете использовать это перечисление для ссылки на разделы по имени, а не по номеру.
(На практике вы, вероятно, не использовали бы kFormSectionFirstSection
в качестве описательного имени, но что-то вроде kFormSectionNameFieldSection
или kFormSectionAddressFieldSection
и т. Д., Но, надеюсь, это должно проиллюстрировать структуру enum
.)
Как бы вы использовали это?
Вот пример нескольких методов делегата табличного представления, которые демонстрируют, как это полезно:
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
return kFormSections;
}
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
switch (section) {
case kFormSectionFirstSection:
return kFormFirstSectionRows;
case kFormSectionSectionSection:
return kFormSecondSectionRows;
...
default:
break;
}
return -1;
}
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// cell setup or dequeue...
switch (indexPath.section) {
case kFormSectionThirdSection: {
switch (indexPath.row) {
case kFormThirdSectionFourthRow: {
// do something special here with configuring
// the cell in the third section and fourth row...
break;
}
default:
break;
}
}
default:
break;
}
return cell;
}
Это должно быстро показать полезность и мощность перечислений.
Имена в коде намного легче читать, чем числа. Когда вы имеете дело с методами делегатов, если у вас есть хорошее описательное имя для раздела или строки, вы можете легче прочитать логику управления табличным представлением и ячейками.
Если вы хотите изменить порядок секций или строк, все, что вам нужно сделать, это изменить порядок нумерованных меток в конструкции enum
. Вам не нужно вдаваться во все методы делегата и менять магические числа , что быстро превращается в хитрый и подверженный ошибкам танец, если у вас есть более пары секций и строк.