在iOS Objective-C中使用JSON数据创建动态表单
我需要创建一个关于JSON数据值的动态表单。我已经解析了JSON数据,并使用不同的控件获取了数据,比如Textfield、TextView、下拉列表和Switch,但我不知道如何在表单视图中动态添加字段。任何帮助都将不胜感激。谢谢在iOS Objective-C中使用JSON数据创建动态表单,ios,objective-c,xcode,ios-autolayout,Ios,Objective C,Xcode,Ios Autolayout,我需要创建一个关于JSON数据值的动态表单。我已经解析了JSON数据,并使用不同的控件获取了数据,比如Textfield、TextView、下拉列表和Switch,但我不知道如何在表单视图中动态添加字段。任何帮助都将不胜感激。谢谢 { "success": true, "result": { "label": "Contacts", "name": "Contacts", "createable": true, "updateable": true, "deleteable": true, "r
{
"success": true,
"result": {
"label": "Contacts",
"name": "Contacts",
"createable": true,
"updateable": true,
"deleteable": true,
"retrieveable": true,
"fields": [
{
"name": "salutationtype",
"label": "Salutation",
"mandatory": false,
"type": {
"name": "string"
},
"nullable": true,
"editable": true,
"default": ""
},
{
"name": "firstname",
"label": "First Name",
"mandatory": false,
"type": {
"name": "string"
},
"nullable": true,
"editable": true,
"default": ""
},
{
"name": "contact_no",
"label": "Contact Id",
"mandatory": false,
"type": {
"name": "string"
},
"nullable": false,
"editable": false,
"default": ""
},
{
"name": "phone",
"label": "Office Phone",
"mandatory": false,
"type": {
"name": "phone"
},
"nullable": true,
"editable": true,
"default": ""
},
{
"name": "lastname",
"label": "Last Name",
"mandatory": true,
"type": {
"name": "string"
},
"nullable": false,
"editable": true,
"default": ""
},
{
"name": "mobile",
"label": "Mobile Phone",
"mandatory": false,
"type": {
"name": "phone"
},
"nullable": true,
"editable": true,
"default": ""
},
{
"name": "account_id",
"label": "Organization Name",
"mandatory": false,
"type": {
"refersTo": [
"Accounts"
],
"name": "reference"
},
"nullable": true,
"editable": true,
"default": ""
},
{
"name": "leadsource",
"label": "Lead Source",
"mandatory": false,
"type": {
"picklistValues": [
{
"label": "Cold Call",
"value": "Cold Call"
},
{
"label": "Existing Customer",
"value": "Existing Customer"
},
{
"label": "Self Generated",
"value": "Self Generated"
},
{
"label": "Employee",
"value": "Employee"
},
{
"label": "Partner",
"value": "Partner"
},
{
"label": "Public Relationship",
"value": "Public Relationship"
},
{
"label": "Direct Mail",
"value": "Direct Mail"
},
{
"label": "Conference",
"value": "Conference"
},
{
"label": "Trade Show",
"value": "Trade Show"
},
{
"label": "Website",
"value": "Website"
},
{
"label": "Word of Mouth",
"value": "Word of Mouth"
},
{
"label": "Others",
"value": "Others"
}
],
"defaultValue": "Cold Call",
"name": "picklist"
},
"nullable": true,
"editable": true,
"default": ""
},
- 首先,您需要标识JSON对象,以便标识您需要的UILabel、UITextfield等
- 在JSON响应中设置所有标志,比如动态字段是否可编辑
- 必须是您的json数据结构修复
- 首先,您需要标识JSON对象,以便标识您需要的UILabel、UITextfield等
- 在JSON响应中设置所有标志,比如动态字段是否可编辑
- 必须是您的json数据结构修复
您需要的不仅仅是这些,但这里是一个开始,让您朝着正确的方向前进 一个非常简单的方法如下所示: 在视图控制器中添加一个数组以跟踪输入字段
@interface ViewController ()
@property (strong, nonatomic) NSMutableArray *fields;
@end
在视图控制器的viewDidLoad(或其他适当的位置)中,添加循环以创建每个元素并将其添加到视图控制器的视图中
self.fields = [NSMutableArray arrayWithCapacity:10]; // Clear and init
CGFloat y = 0.0; // field position
for (NSDictionary *field in jsonData[@"fields"]) {
// create a label for the field
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10 + y, 100, 20)];
label.text = field[@"label"];
[self.view addSubview:label];
// create the field
NSString *fieldTypeName = ((NSDictionary *)field[@"type"])[@"name"];
if ([fieldTypeName isEqualToString:@"string"]) {
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10 + y, 100, 20)];
[self.view addSubview:textField];
// Keep track of the fields
[self.fields addObject:@{ @"data": textField, @"json": field } ];
} else if ([fieldTypeName isEqualToString:@"picklist"]) {
// create picklist and add to view
} // add more field types here...
y += 25; // move to next field position
}
当然,您还需要获取用户输入的字段数据。一种简单的方法是将每个字段添加到一个数组中,以后可以读取该数组
要访问用户数据,只需循环访问它们
for (NSDictionary *field in self.fields) {
// Your initial JSON data
NSDictionary *jsonField = (NSDictionary *)field[@"json"];
// Your input field
UITextField *textField = (UITextField *)field[@"data"];
// User data
NSString *userData = textField.text;
// Do something with the data
}
你需要的不仅仅是这些,但这里是一个开始,让你在正确的方向 一个非常简单的方法如下所示: 在视图控制器中添加一个数组以跟踪输入字段
@interface ViewController ()
@property (strong, nonatomic) NSMutableArray *fields;
@end
在视图控制器的viewDidLoad(或其他适当的位置)中,添加循环以创建每个元素并将其添加到视图控制器的视图中
self.fields = [NSMutableArray arrayWithCapacity:10]; // Clear and init
CGFloat y = 0.0; // field position
for (NSDictionary *field in jsonData[@"fields"]) {
// create a label for the field
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10 + y, 100, 20)];
label.text = field[@"label"];
[self.view addSubview:label];
// create the field
NSString *fieldTypeName = ((NSDictionary *)field[@"type"])[@"name"];
if ([fieldTypeName isEqualToString:@"string"]) {
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(110, 10 + y, 100, 20)];
[self.view addSubview:textField];
// Keep track of the fields
[self.fields addObject:@{ @"data": textField, @"json": field } ];
} else if ([fieldTypeName isEqualToString:@"picklist"]) {
// create picklist and add to view
} // add more field types here...
y += 25; // move to next field position
}
当然,您还需要获取用户输入的字段数据。一种简单的方法是将每个字段添加到一个数组中,以后可以读取该数组
要访问用户数据,只需循环访问它们
for (NSDictionary *field in self.fields) {
// Your initial JSON data
NSDictionary *jsonField = (NSDictionary *)field[@"json"];
// Your input field
UITextField *textField = (UITextField *)field[@"data"];
// User data
NSString *userData = textField.text;
// Do something with the data
}
清楚地阅读一个问题,这不是问题的答案。清楚地阅读一个问题,这不是一个给我很多思考的问题的答案。我设计了表格,但有问题从所有领域获取数据。任何帮助都将不胜感激。我想你的意思是获取用户输入的数据?在这种情况下,您希望如何检索数据?有很多可能性,所以第一步是了解用户输入数据后,您想对数据做什么。一旦您知道,您就可以(例如)创建一个字典,在创建字段时在其中存储每个字段。用户完成后,您可以从那里再次访问它。是的,我想获取所有文本字段的值。第一个问题是如何检索用户在文本字段中输入的内容,然后再将每个字段存储到字典中。这给了我很多思考。我设计了表单,但在从所有字段获取数据方面存在问题。任何帮助都将不胜感激。我想你的意思是获取用户输入的数据?在这种情况下,您希望如何检索数据?有很多可能性,所以第一步是了解用户输入数据后,您想对数据做什么。一旦您知道,您就可以(例如)创建一个字典,在创建字段时在其中存储每个字段。用户完成后,您可以从那里再次访问它。是的,我想获取“所有文本字段”值。第一个问题是如何检索用户在文本字段中输入的内容,然后将每个字段存储在字典中。