我想设计一个应用程序,需要用户输入一些内容,如开始日期,结束日期,一堆其他选项和一些文本注释,我计划使用选择器来选择将以模态方式向上滑动的数据。我需要上下移动视图,以确保当拾音器和键盘上下滑动时,被填充的元素保持聚焦。
我的问题是实施这种“形式”的最佳观点是什么?我在想分组表视图,我可以在哪里区分字段。
还有其他方法来实现这些东西吗? 根据经验或最佳实践,我可以探索哪些更好的替代品或示例代码或应用程序?
开发。
答案 0 :(得分:7)
表单最类似于iPhone的界面将是一个分组的表格视图。在使用其他使用分组表视图添加和编辑结构化数据的应用程序之后,这是大多数用户所期望的。
一个好的做法是为部分和部分内的行创建enum
(枚举),例如:
typedef enum {
kFormSectionFirstSection = 0,
kFormSectionSecondSection,
kFormSectionThirdSection,
kFormSections
} FormSection;
typedef enum {
kFormFirstSectionFirstRow = 0,
kFormFirstSectionSecondRow,
kFormFirstSectionRows
} FormFirstSectionRow;
...
在此示例中,您可以使用此枚举按名称而不是数字来引用部分。
(实际上,您可能不会将kFormSectionFirstSection
用作描述性名称,而是使用kFormSectionNameFieldSection
或kFormSectionAddressFieldSection
等等,但这应该有希望说明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,一旦您有多个部分和行,这很快就会成为一个棘手且容易出错的舞蹈。