纯表单——从JSON文件创建登录、调查问卷等表单屏幕的最简单方式。纯表单提供将解析属性和特殊参数转换为对象的工具,以便进一步对其进行操作。
从纯表单子目录下载源文件。然后将源文件添加到Xcode项目,并导入PureLayout.h
头文件。
纯表单简洁且易于使用,以下是几个步骤:
JSON规则
段落描述JSON文件中的表单;通过下方所述的PFSettings
创建设置;
PFSettings *settings = [[PFSettings alloc] init];
settings.keyboardTypeValidation = YES;
settings.formDelegate = self;
settings.tableViewDelegate = self;
// etc.
使用前一步创建的设置创建一个PFFormController
实例,使用UITableView
;
self.formController = [[PFFormController alloc] initWithTableView:self.tableView settings:settings];
只需使用makeFormWithJSONFile:
方法即可从第一步中的JSON文件创建并显示表单;
[self.formController makeFormWithJSONFile:@"form"];
就这么多!
设置头文件完全文档化。以下是您可以设置的主要参数:
keyboardTypeValidation
failureReasons
cellHeight
以及为UIKit
控件提供的代理:
PFFormDelegate
UITableViewDelegate
UITextFieldDelegate
PFSegmentedControlDelegate
PFSwitchControlDelegate
PFSliderControlDelegate
PFStepperControlDelegate
只需使用属性名和值描述JSON文件中的自定义单元格。当然,也使用了保留字和特殊字符。您可以在常量头文件中找到保留字和特殊字符。
<
和>
分隔。2个单元格的基本结构看起来如下(注意层级):
[ /// 0 level
{
"<cell_class_name + cell_identifier>": { // First cell
property_name_1: { /// 1 level
in_property_name_1.1: value, /// 2 level
in_property_name_1.2: value
},
property_name_2: {
in_property_name_2.1: value
}
}
},
{
"<cell_class_name + cell_identifier>": { // Second cell
// Setup
},
{
// etc.
}
]
注意JSON解析仅支持2级嵌套。
如果单元格类名或单元格标识符与前一个相同,可以使用=
来简化它:
{
"<= + =>": { // Any cell
// Setup
},
保留字和特殊字符的使用
保留字 | 层级 | 值 |
---|---|---|
<section> |
0 | 部分索引 |
<value> |
1 | 当前值 |
<key> |
1 | 保存键以供输出字典使用 |
<validators> |
1 | 验证器数组 |
<显示> |
1 | 属性名,用于显示更改后的值 |
所有保留字和特殊字符都是可选的。
字符 | 用法 | 示例 | 描述 |
---|---|---|---|
? | 属性名 | textField? | 表明这是一个用于验证的表单——而不仅仅是一个视图 |
! | 验证器名称 | min_value! | 在值更改后立即开始验证 |
* | 属性名 | text* | 表明此值是NSLocalizedString 宏的关键 |
# | 值 | ic_turtle#6F3F83 或 #6F3F83 | 直接使用或者是根据名称为图像进行十六进制着色 |
<validators>
中可用的验证器键
验证器 | 值 |
---|---|
equal |
字符串或数字 |
equal_next |
真 |
equal_previous |
真 |
equal_length |
数字 |
min_length |
数字 |
max_length |
数字 |
min_value |
数字 |
max_value |
数字 |
required |
真 |
类型 |
email 或 full_name |
自定义 |
正则表达式字符串 |
验证器在2级中被使用,并且它们应该嵌套在<validators>
中。
枚举在JSON中只是数值。顺便说一下,有一些枚举与字符串值相关联
UIKeyboardType
UITextAutocapitalizationType
UITextAutocorrectionType
UITextSpellCheckingType
UIKeyboardAppearance
UIReturnKeyType
UITextFieldViewMode
好的,看看在真实示例中是什么样子
[
{
"<TextFieldCell + TextFieldCellIdentifier>": {
"textField?": {
"placeholder": "Huh, centered?",
"textAlignment": 1
}
}
}
]
现在让我们创建一个带有验证器的登录表单
[
{
"<TextFieldCell + TextFieldCellIdentifier>": {
"textField?": {
"placeholder": "Login",
"textAlignment": 1,
"keyboardType": "UIKeyboardTypeEmailAddress",
"<key>": "login",
"<validators>": {
"type": "email"
}
}
}
},
{
"<= + =>": {
"textField?": {
"placeholder": "Password",
"textAlignment": 1,
"secureTextEntry": true,
"<key>": "password",
"<validators>": {
"min_length!": 6,
"max_length!": 25
}
}
}
},
{
"<section>": 1
},
{
"<ButtonCell + ButtonCellIdentifier>": {
"titleLabel": {
"text": "Login",
"textColor": "#6F3F83"
}
}
}
]
现在只需验证输入的值并将它们保存到字典中。左边的表单凭据满足验证器,并且[self.formController validate]
将返回YES
if ([self.formController validate]) {
NSDictionary *loginInfo = [self.formController allKeyValuePairs];
// Send it to server
}