0

質問の数と質問のオプションの数が動的であるクイズ プロジェクトを実行しています (サービス URL から取得)。質問の最大 5 つのオプション (ただし、減少する可能性があります)。質問とそのオプションは 1 つのセクションに表示されます。NSMutableArray の 1 つのセクションでオブジェクトを取得し、毎回オプションをループしています。しかし、最後のオプションしか得られません。なぜそうなのか理解できませんでした。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *hlCellID=@"hlCellID";

    UITableViewCell* hlcell=[tableView dequeueReusableCellWithIdentifier:hlCellID];

    if(hlcell == nil)
    {
        hlcell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault    reuseIdentifier:hlCellID]autorelease];

        hlcell.accessoryType = UITableViewCellAccessoryNone;
        hlcell.selectionStyle = UITableViewCellSelectionStyleNone;
        lblQuestion = [[UILabel alloc] initWithFrame:CGRectZero];
        lblQuestion.tag = 1;
        lblQuestion.backgroundColor = [UIColor clearColor];
        [lblQuestion setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14]];
        [lblQuestion setLineBreakMode:NSLineBreakByWordWrapping];
        [hlcell addSubview:lblQuestion];

        lblanswers = [[UILabel alloc] initWithFrame:CGRectZero];
        lblanswers.tag = 2;
        lblanswers.backgroundColor = [UIColor clearColor];
        [lblanswers setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];
        [lblanswers setLineBreakMode:NSLineBreakByWordWrapping];
        [hlcell addSubview:lblanswers];

    }
    int section=indexPath.section;
    NSMutableArray *sectionItems=[self.finalarray objectAtIndex:indexPath.section];
    int n=[sectionItems count];

   hlcell.selectionStyle = UITableViewCellSelectionStyleNone;


    NSString *question = [NSString stringWithFormat:@"%@",[[sectionItems  objectAtIndex:indexPath.row] objectForKey:@"Question"]];
    CGSize constraint1 = CGSizeMake(320, 2000.0f);
    CGSize size1 = [question sizeWithFont: [UIFont fontWithName:@"Helvetica-Bold" size:14] constrainedToSize:constraint1 lineBreakMode:NSLineBreakByWordWrapping];
    lblQuestion = (UILabel *)[hlcell viewWithTag:1];
    lblQuestion.text = [NSString stringWithFormat:@"%@",question];
    [lblQuestion setNumberOfLines:0];
    lblQuestion.frame = CGRectMake(10,25, size1.width, size1.height);


    for(int j=1;j<n;j++)
    {

        NSLog(@"%@",[[sectionItems  objectAtIndex:j] objectForKey:@"Description"]);
        NSString *answer = [NSString stringWithFormat:@"%@",[[sectionItems  objectAtIndex:j] objectForKey:@"Description"]];
        CGSize constraint2 = CGSizeMake(320, 2000.0f);
        CGSize size2 = [answer sizeWithFont: [UIFont fontWithName:@"Helvetica-Bold" size:14] constrainedToSize:constraint2 lineBreakMode:NSLineBreakByWordWrapping];
        lblanswers = (UILabel *)[hlcell viewWithTag:2];
        lblanswers.text = [NSString stringWithFormat:@"%@",answer];
        [lblanswers setNumberOfLines:0];
        lblanswers.frame = CGRectMake(10,20*j, size2.width, size2.height);
        [hlcell.contentView addSubview:lblanswers];



    }

    return hlcell;

}

lblanswers のフレームを設定する方法がわかりませんでした。

編集:

-(IBAction)checkboxClicked:(id)sender
{
    NSMutableArray *arr1=[[NSMutableArray alloc]init];

    NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)
                              [[sender superview] superview]];


    NSLog(@"The section  is %d",  indexPath.section);
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    NSMutableArray *cellSection = [self.finalarray objectAtIndex:indexPath.section];
    int tagID=[sender tag];

    int divnum=0;
    if(tagID<100)
        divnum=10;
    else
        divnum=100;
    int section=[sender tag]/divnum;
    section-=1;
    int itemId=[sender tag]%divnum;

    if(itemId==selectedrowforCheckBox)
    {

        if(self.isChecked ==NO)
        {
            self.isChecked =YES;
            [sender setImage:[UIImage imageNamed:@"checkbox_checked.png"] forState:UIControlStateNormal];

            NSNumber* xWrapped = [NSNumber numberWithInt:itemId];
            int m=[cellSection count]-1;
            NSString *questionId=[[cellSection objectAtIndex:m-1]objectForKey:@"QId"];

            NSMutableDictionary *hk=[[NSMutableDictionary alloc]init];
            [hk setObject:xWrapped forKey:@"Ans"];
            [hk setObject:questionId forKey:@"QId"];
            [selectedOptionandQIdArray addObject:hk];





        }
       else
        {
            self.isChecked =NO;
            [sender setImage:[UIImage imageNamed:@"checkbox_unchecked.png"]forState:UIControlStateNormal];

            NSNumber* xWrapped = [NSNumber numberWithInt:itemId];
            int m=[cellSection count]-1;
            NSString *questionId=[[cellSection objectAtIndex:m-1]objectForKey:@"QId"];

            for (int i=0;i<[selectedOptionandQIdArray count];i++)
            {

                NSString *qid=[[selectedOptionandQIdArray objectAtIndex:i]objectForKey:@"QId"];
                if(xWrapped==[[selectedOptionandQIdArray objectAtIndex:i]objectForKey:@"Ans"] && [questionId isEqualToString:qid])
                {

                    NSLog(@"nnd");
                    [selectedOptionandQIdArray removeObjectAtIndex:i];

                }




            }



        }

        selectedrowforCheckBox=itemId; 

    }
    else
    {

        if(self.isChecked ==NO)
        {
            self.isChecked =YES;
            [sender setImage:[UIImage imageNamed:@"checkbox_checked.png"] forState:UIControlStateNormal];

            NSNumber* xWrapped = [NSNumber numberWithInt:itemId];
            int m=[cellSection count]-1;
            NSString *questionId=[[cellSection objectAtIndex:m-1]objectForKey:@"QId"];

            NSMutableDictionary *hk=[[NSMutableDictionary alloc]init];
            [hk setObject:xWrapped forKey:@"Ans"];
            [hk setObject:questionId forKey:@"QId"];


            [selectedOptionandQIdArray addObject:hk];



        }
        else
        {
            self.isChecked =NO;
            [sender setImage:[UIImage imageNamed:@"checkbox_unchecked.png"]forState:UIControlStateNormal];


        }

        selectedrowforCheckBox=itemId;

    }





}
4

1 に答える 1

0

それは間違っている。作業を 2 つの部分に分けます。

その前に、各キーが質問であり、関連するオブジェクトがすべての回答を含む配列である辞書を作成します。

  • セクション数 = [辞書数]
  • セクションごとの行数 = [[dictionary valueForKey:[[dic allKeys] objectAtIndex:indexPath.section]] count]

    1. 質問 - UITextView でカスタム ビューを作成し、それを各セクションのヘッダーとして返します。質問に基づいて高さを計算して返すことで、高さを調整できます。

    2. 回答 - UITextView でカスタム セルを作成し、セクションと行に基づいてテキストを設定します。

この戦略は、コードに構造を与えることでコードを単純化するだけでなく、ユーザーが選択した回答の検出を指定します。これは、indexPath を保存し、質問のセクションとユーザーが選択した回答の行を確認できるためです。

ここからサンプル コードをダウンロードできます: http://www.saplogix.net/QA/sample.zip

于 2013-02-09T12:06:12.177 に答える