如何在iOS中为Quiz模块创建用户界面?

时间:2014-09-02 08:17:03

标签: ios iphone uitableview user-interface ios7

我非常喜欢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"
        }
]
}

enter image description here

提前致谢!

1 个答案:

答案 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;
}

基本就是那个