在iOS中动态创建表单

时间:2013-02-28 04:55:01

标签: ios json forms rest

我对iOS没有任何了解,我正在寻找一个需要根据服务器端发送的信息动态构建表单的应用程序。

我正在从服务器端(基于Java EE)查看它,但是想要明确iOS端的约束和实践是什么,这决定了我是否应该沿着这条路走下去。

如果发送到iOS应用的数据如下所示:

[
    {
        "values": "Text Field",
        "required": "true",
        "hidden": "true",
        "readonly": "false",
        "prevalue": "This is text field",
        "fieldesc": "First Name"
        "mask": "false"
    },

    {
        "values": "Text Field",
        "required": "true",
        "hidden": "true",
        "readonly": "false",
        "prevalue": "01/01/1980",
        "fieldesc": "Date Of Birth"
        "mask": "false"
    },


    {
        "values": "Text Field",
        "required": "true",
        "hidden": "true",
        "readonly": "false",
        "prevalue": "888 888 888",
        "fieldesc": "Tax File Number"
        "mask": "true"
    },
]

我希望iOS应用创建相应的字段。

当字段数量增加时,这可能会变得复杂,我可能需要保留在单独的页面中。

我想听听有关如何接近这一点的想法和建议。

2 个答案:

答案 0 :(得分:3)

UITableViewController开头。 实现UITableViewDataSourceUITableViewDelegate委托,这将允许您根据从服务器获取的字段元数据动态创建行。

您将实现cellForRowAtIndexPathnumberOfRowsnumberOfSections等方法,为表单中的每个字段创建UITableViewCell。

您将UITextField控件插入到tableview的每个单元格中。 最终,你最终会得到一个可滚动的,可编辑的形式,其中包含嵌入在tableview中的文本字段。

答案 1 :(得分:2)

我认为我的解决方案不是最好的解决方案,但我认为您可以使用简单的for循环来实现它。

首先你需要解析整个JSON,它会给你一个包含3个词典的数组。

float xCord = 20;
float yCord = 40;

for (int loop = 0; loop<[parsedJsonArray count]; loop++)
{
  xCord = 20;
  //You need to create a label for displaying the description
  UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(xCord,yCord,100,20)];
  lab.text = [[parsedJsonArray objectAtIndex:0] valueForKey:@"fieldesc"];
  [self.view addSubview:lab];

  xCord = 130;
  if ([[[parsedJsonArray objectAtIndex:0] valueForKey:@"values"] isEqualToString:@"Text Field"])
 { 
   UITextField *tfd = [[UITextField alloc] initWithFrame:CGRectMake(xCord,yCord,100,20)];
   tfd.text = [[parsedJsonArray objectAtIndex:0] valueForKey:@"prevalue"];
   [self.view addSubview:tfd];
 }

 yCord += 35;
}

您需要根据需要调整x和y坐标,也可以对文本字段和其他表单元素进行相同的调整。

另一点:如果你需要多个页面,你需要在循环内处理它。但是我建议最好把滚动视图和其他元素放在上面。