iPhone UI Design вопрос - лучший способ дизайна форм? - PullRequest
3 голосов
/ 21 июля 2010

Я хочу разработать приложение, в котором пользователю нужно вводить несколько вещей, таких как дата начала, дата окончания, множество других опций и некоторые текстовые комментарии, для которых я планирую использовать средства выбора для выбора данных, которые будут перемещаться модально. Мне нужно будет перемещать вид вверх и вниз, чтобы убедиться, что заполняемый элемент остается в фокусе, когда манипуляторы и клавиатура скользят вверх и вниз.

Мой вопрос: как лучше всего реализовать такую ​​"форму"? Я думал о сгруппированном табличном представлении, где я мог бы разделить поля на разделы.

Есть ли другой способ реализовать эти вещи? Опыт или лучшие практики, есть ли какие-нибудь лучшие альтернативы или примеры кода или приложений, которые я могу исследовать?

Dev.

1 Ответ

7 голосов
/ 21 июля 2010

Наиболее похожим на 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. Вам не нужно вдаваться во все методы делегата и менять магические числа , что быстро превращается в хитрый и подверженный ошибкам танец, если у вас есть более пары секций и строк.

...