我的想法是分步进行
1) 创建模型类示例
class UIControl
{
NSString *strControlName;
NSString *strControlType;
NSString *strControlValue;
Bool isSelected;
}
2) 解析json并创建模型类对象
3) 将模型类对象添加到 arrOfControls
4) 要么使用表格视图,要么只使用循环遍历整个 arrOfControls
5) 以防万一,表格视图检查 cellForRowAtIndexPath 类型的控件。
6) 为您的 JSON 数据可能附带的每个可能的字段创建自定义单元格。
7) 根据控件类型返回委托函数(cellForRowAtIndexPath)中的自定义单元格。例如:-
if([[arrOfControls objectAtIndexPath:indexPath.row] strType] isEqualToString:@"TextField"]])
{
//create object of customcell for textfield and return cell
}
else if([[arrOfControls objectAtIndexPath:indexPath.row] strType] isEqualToString:@"CheckBox"]])
{
//create object of customcell for checkbox and return cell
}
else
{
//control type if not match any of the above
}
这是粗略的想法而不是实际的代码。
我的项目中的一些代码,用于 cellForRowAtIndexPath
if(indexPath.section==0)
{
FormField *currControl=[fieldArray objectAtIndex:indexPath.row];
if(([currControl.strFieldType caseInsensitiveCompare:@"TextLabel"]==NSOrderedSame )|| [currControl.strFieldType caseInsensitiveCompare:@"Text"]==NSOrderedSame)
{
TextFieldWithLabelTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellTextFieldWithLabel"];
cell.txtTextField.delegate=self;
[cell.txtTextField setTag:indexPath.row];
if([currControl strFieldValue]==nil)
{
cell.txtTextField.text = @"";
[cell.txtTextField setPlaceholder:[currControl strPlaceHolder]];
}
else
{
//if save value exists
cell.txtTextField.text=@"";
cell.txtTextField.text=[currControl strFieldValue];
}
cell.lblTextFieldIdenti.text=[[fieldArray objectAtIndex:indexPath.row] strFieldName];
if([currControl.strFieldType caseInsensitiveCompare:@"Text"]==NSOrderedSame)
{
cell.lblTextFieldIdenti.text=@"";
}
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
return cell;
}
else if(([currControl.strFieldType caseInsensitiveCompare:@"TextView"]==NSOrderedSame)||([currControl.strFieldType caseInsensitiveCompare:@"TextViewWithCam"]==NSOrderedSame))
{
TableViewTextAreaCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TableViewTextAreaCell"];
cell.txtView.delegate=self;
cell.txtView.text=@"";
if([currControl strFieldValue]!=nil)
{
//if save value exists
cell.txtView.text=@"";
cell.txtView.text=[currControl strFieldValue];
}
cell.fieldLabel.text=[[fieldArray objectAtIndex:indexPath.row] strFieldName];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init];
keyboardDoneButtonView.barStyle = UIBarStyleDefault;
keyboardDoneButtonView.translucent = NO;
keyboardDoneButtonView.barTintColor=[UIColor colorWithHue:0.6 saturation:0.33 brightness:0.69 alpha:0];
[keyboardDoneButtonView sizeToFit];
UIBarButtonItem *leftFlexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[barItems addObject:leftFlexSpace];
UIBarButtonItem *btnDone = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"BTN_DONE", nil) style:UIBarButtonItemStyleBordered target:self action:@selector(pickerDoneClicked:)];
[barItems addObject:btnDone];
[keyboardDoneButtonView setItems:barItems animated:YES];
[cell.txtView setInputAccessoryView:keyboardDoneButtonView];
[cell configureCell:currControl.strFieldName];
cell.fieldLabel.textColor=[UIColor darkTextColor];
cell.txtView.backgroundColor =[UIColor colorWithHexString:@"#f3f1f2"];
cell.fieldLabel.font=[UIFont systemFontOfSize:12];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell.imgViewCam setHidden:TRUE];
if([currControl.strFieldType caseInsensitiveCompare:@"TextViewWithCam"]==NSOrderedSame)
{
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(CameraClicked:)];
[singleTap setNumberOfTapsRequired:1];
[cell.imgViewCam addGestureRecognizer:singleTap];
[cell.imgViewCam setHidden:FALSE];
}
return cell;
}
else if([currControl.strFieldType caseInsensitiveCompare:@"DropDown"]==NSOrderedSame)
{
//if dropdwon box
DropDownTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellDropDown"];
cell.lblDropDownidentifier.text=[currControl strFieldName];
[cell.btnDropDown setTag:indexPath.row];
[cell.btnDropDown addTarget:self action:@selector(ShowOptions:) forControlEvents:UIControlEventTouchUpInside];
[cell.btnDropDown setTitle:@"" forState:UIControlStateNormal];
if([currControl strFieldValue]!=nil)
{
[cell.btnDropDown setTitle:[currControl strFieldValue] forState:UIControlStateNormal];
}
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
if([[currControl strFieldName] caseInsensitiveCompare:@"Time Of Delivery:"]==NSOrderedSame)
{
cell.imgDropDown.image=[UIImage imageNamed:@"stopwatch.png"];
}
else if([[currControl strFieldName] caseInsensitiveCompare:@"Date Of Delivery:"]==NSOrderedSame)
{
cell.imgDropDown.image=[UIImage imageNamed:@"calendar.png"];
}
else
{
cell.imgDropDown.image=[UIImage imageNamed:@"dropdown.jpeg"];
}
return cell;
}