iPhone UI设计问题 - 设计表单的最佳方法?

时间:2010-07-21 18:41:00

标签: iphone forms uitableview modalpopups

我想设计一个应用程序,需要用户输入一些内容,如开始日期,结束日期,一堆其他选项和一些文本注释,我计划使用选择器来选择将以模态方式向上滑动的数据。我需要上下移动视图,以确保当拾音器和键盘上下滑动时,被填充的元素保持聚焦。

我的问题是实施这种“形式”的最佳观点是什么?我在想分组表视图,我可以在哪里区分字段。

还有其他方法来实现这些东西吗? 根据经验或最佳实践,我可以探索哪些更好的替代品或示例代码或应用程序?

开发。

1 个答案:

答案 0 :(得分:7)

表单最类似于iPhone的界面将是一个分组的表格视图。在使用其他使用分组表视图添加和编辑结构化数据的应用程序之后,这是大多数用户所期望的。

一个好的做法是为部分和部分内的行创建enum(枚举),例如:

typedef enum {
    kFormSectionFirstSection = 0,
    kFormSectionSecondSection,
    kFormSectionThirdSection,
    kFormSections
} FormSection;

typedef enum {
    kFormFirstSectionFirstRow = 0,
    kFormFirstSectionSecondRow,
    kFormFirstSectionRows
} FormFirstSectionRow;

...

在此示例中,您可以使用此枚举按名称而不是数字来引用部分。

(实际上,您可能不会将kFormSectionFirstSection用作描述性名称,而是使用kFormSectionNameFieldSectionkFormSectionAddressFieldSection等等,但这应该有希望说明enum的结构{1}}。)

你会怎么用?

以下是一些表格视图委托方法的示例,它们演示了这有用的方法:

- (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构造中枚举标签的顺序。您不需要进入所有委托方法并更改magic numbers,一旦您有多个部分和行,这很快就会成为一个棘手且容易出错的舞蹈。