在iOS中使用JSON创建动态表单

时间:2012-11-20 11:14:03

标签: objective-c json ios5

我需要使用JSON创建动态表单。我已经解析了JSON,但我不知道如何动态创建表单。请提供一些代码或教程。

[
    {
        "cssClass": "head"
    },
    {
        "cssClass": "input_text",
        "values": "Text Field",
        "fieldsize": "small",
        "required": "undefined",
        "prevalue": "This is text field",
        "autocaps": "none",
        "fieldesc": "text field description"
    },
    {
        "cssClass": "number",
        "values": "Number ",
        "fieldsize": "small",
        "required": "required",
        "prevalue": "This is Number Field",
        "autocaps": "capitalize",
        "fieldesc": "number field description"
    },
    {
        "cssClass": "email",
        "values": "Email",
        "fieldsize": "small",
        "required": "required",
        "prevalue": "This is email field",
        "autocaps": "none",
        "fieldesc": "email field description"
    },
    {
        "cssClass": "password",
        "values": "Password",
        "fieldsize": "small",
        "required": "required",
        "prevalue": "password",
        "autocaps": "none",
        "fieldesc": "password field description"
    },
    {
        "cssClass": "date",
        "values": "Date",
        "fieldsize": "medium",
        "required": "required",
        "prevalue": "datefield",
        "autocaps": "uppercase",
        "fieldesc": "date field description"
    },
    {
        "cssClass": "time",
        "values": "Time",
        "fieldsize": "small",
        "required": "undefined",
        "prevalue": "time field",
        "autocaps": "uppercase",
        "fieldesc": "time field description"
    }
]

1 个答案:

答案 0 :(得分:1)

首先,您需要将JSON解析为字典,然后使用每个字典条目实例化自定义对象:

@interface FormItem : NSObject

@property (nonatomic, retain) NSString * cssClass;
@property (nonatomic, retain) NSString * values;
//etc

+(id)initWithDictionary:(NSDictionary*)dictionary;

@end

@implementation FormItem

+(id)initWithDictionary:(NSDictionary*)dictionary {
    if (self = [super init]) {
        _cssClass = [dictionary valueForKey:@"cssClass"];
        //etc
    }
}

@end

在NSArray中拥有这些对象(例如视图控制器中的self.formItems)之后,您将使用该列表来绑定tableView。在cellForRowAtIndexPath中:您需要将项目拉出:

FormItem *currentItem = self.formItems[indexPath.row];

此时,您需要动态创建UITextField或您需要的任何其他控件,并将它们添加到表格单元格中:

if ([currentItem.values isEqualToString:@"Text Field"] {
    UITextField *text = [[UITextField alloc] init...];
    //setup
    [cell.contentView addSubview:text];
}

您可以将这些内容抽象到您的FormItem类中,但这是快速方法。