纯表单 0.0.2

纯表单 0.0.2

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2016年12月

Pavel维护。



纯表单 0.0.2

  • 作者:
  • Pavel Puzyrev

纯表单——从JSON文件创建登录、调查问卷等表单屏幕的最简单方式。纯表单提供将解析属性和特殊参数转换为对象的工具,以便进一步对其进行操作。

设置

手动

纯表单子目录下载源文件。然后将源文件添加到Xcode项目,并导入PureLayout.h头文件。

使用方法

纯表单简洁且易于使用,以下是几个步骤:

  1. 使用下方的JSON规则段落描述JSON文件中的表单;
  2. 通过下方所述的PFSettings创建设置;

    PFSettings *settings = [[PFSettings alloc] init];
    settings.keyboardTypeValidation = YES;
    settings.formDelegate = self;
    settings.tableViewDelegate = self;
    
    // etc.
  3. 使用前一步创建的设置创建一个PFFormController实例,使用UITableView

    self.formController = [[PFFormController alloc] initWithTableView:self.tableView settings:settings];
  4. 只需使用makeFormWithJSONFile:方法即可从第一步中的JSON文件创建并显示表单;

    [self.formController makeFormWithJSONFile:@"form"];
  5. 就这么多!

设置

设置头文件完全文档化。以下是您可以设置的主要参数:

  • keyboardTypeValidation
  • failureReasons
  • cellHeight

以及为UIKit控件提供的代理:

  • PFFormDelegate
  • UITableViewDelegate
  • UITextFieldDelegate
  • PFSegmentedControlDelegate
  • PFSwitchControlDelegate
  • PFSliderControlDelegate
  • PFStepperControlDelegate

JSON规则

只需使用属性名和值描述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
    类型 emailfull_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
    }

注记

  • 示例项目文件只能在Xcode 8中正确打开
  • 示例项目中没有自动滚动到活动字段

待办事项

  • [ ] 移除嵌套限制
  • [ ] 避免键盘的使用