jopen 4年前


Form源于有一个需求,需要一个表单在iOS app和网页客户端之间能共享逻辑,发现JSON是完成这项目的最佳方式。


  • 多个分组: For example you can have a group for personal details and another one for shipping information
  • 表单验证: We supportrequired,maximum length,minimum lengthandformat(regex). We also support many field types, for example:text,number,phone_number,email,date,nameand more
  • 自定义大小: Totalwidthis handled as 100% whileheightis handled in chunks of 85 px
  • 自定义表单项: You can register your custom fields, it's pretty simple (our basic example includes how to make animagefield)
  • 公式或计算的值: We support fields that contain generated values from other fields
  • Targets:Hide,show,update,enable,disableorcleara field using a target. It's pretty powerful, you can even set a condition for your target to run
  • Dropdowns: Generating dropdowns is as easy as adding values to your field, values supportdefaultflags, targets (in case you want to trigger hiding a field based on a selection), string values or numeric values and subtitles (in case you want to hint the consequences of your selection)



This are the required steps to create a basic form with a first name field.



[    {      "id":"group-id",      "title":"Group title",      "sections":[        {          "id":"section-0",          "fields":[            {              "id":"first_name",              "title":"First name",              "type":"name",              "size":{                "width":30,                "height":1              }            }          ]        }      ]    }  ]

In your iPad app

// AppDelegate  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  {      // Don't forget to set your style, or use the default one if you want      [FORMDefaultStyle applyStyle];        //...  }    // UICollectionViewController subclass  - (FORMDataSource *)dataSource  {      if (_dataSource) return _dataSource;        _dataSource = [[FORMDataSource alloc] initWithJSON:self.JSON                                          collectionView:self.collectionView                                                  layout:self.layout                                                  values:nil                                                disabled:NO];        return _dataSource;  }    - (void)viewDidLoad  {      [super viewDidLoad];        self.collectionView.dataSource = self.dataSource;  }