我非常喜欢iPhone。我正在使用XIB for iPhone处理Quiz类应用程序。我的问题是我需要为n个测验问题创建一个用户界面设计,如下所示。任何人都可以建议我应该是最好的方法来创建这个?我从后端服务器获取所有问题和选项。正如我在JSON模型中提到的那样,我为每个测验问题获得了唯一的id作为test_id。可以通过使用表格视图部分(用于问题文本)和每个部分的四行(用于选项)来实现,但现在问题是用户是否为测试ID 1选择选项B,为测试ID 10选择选项A作为答案,那么如何在点击提交按钮之前获得所选用户答案选项B和选项A.请给我同样的建议。
这是我的Quiz模块的JSON模型:
{
"test_details": [
{
"test_id": 1,
"test_qus": "which of the following allows the HP ENVY Beats All-in-One PC to swiftly switch between applications?",
"test_ans_optionA": "Quad-Core 1.0 GHz processor",
"test_ans_optionB": "Windows® 8.1 OS",
"test_ans_optionC": "Intel® Haswell Core Processor",
"test_ans_optionD": "Windows 7 OS",
"test_correct_ans": "optionA"
},
{
"test_id": 2,
"test_qus": "which of the following makes HP ENVY Beats All-in-One PC the best PC for Beats All-in-One PC the best PC for",
"test_ans_optionA": "SRS Premium sound",
"test_ans_optionB": "Monster Beats Solo headphones",
"test_ans_optionC": "Beats AudioTM quad speakers and quad",
"test_ans_optionD": "Windows 7 OS",
"test_correct_ans": "optionB"
}
]
}
提前致谢!
答案 0 :(得分:0)
为了让它具有动态性,您需要在故事板表中准备“动态原型”作为内容并准备原型单元格的X,其中X是您可能需要的不同单元格(表格行)的数量(例如,从截图我看到2) ,1。问题细胞,2。Radiobutton细胞)
然后实现UITableViewDelegate和UITableViewDataSource
您需要维持多项选择(对于每个无线电组的单一选择),您还会遇到无线电按钮的其他问题。
//will hold source of the table (data model) that will be maintained
NSMutableArray *dataSource;//of NSMutableDictionary objects
要更新选择,请使用以下
#pragma mark - UITableViewDelegate
-(void) textView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSMutableDictionary * cellData = dataSource[indexPath.row];
if(cellData) {
//here maintain selection state and reload table data e.g. cellData can store "selected" property
} else {
//error no data for cell at this index
}
}
表的来源
#pragma mark - UITableViewDataSource
-(NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
return [dataSource count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSMutableDictionary *cellData = dataSource[indexPath.row];
NSString *cellId = nil;
NSInteger type = [[cellData valueForKey:@"type"] integerValue];//datasource can store type that will indicate which cell to display (integer is used so switch can be used)
switch (type) {
case 0:
//header cell
cellId = @"headerCell";//this is the cell identifier set in storyboard
break;
case 1:
default:
//radiobutton row - default
cellId = @"radioButtonCell";
break;
}
MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId
forIndexPath:indexPath];
[cell setData:cellData];//MyCustomCell implements the setData method
return cell;
}
基本就是那个