即使我点击了错误的答案uibutton,如何显示正确的答案?

时间:2014-04-30 06:31:00

标签: ios objective-c uibutton

我正在尝试在iOS中制作一个测验应用。现在,即使我点击了错误的答案,我也面临着如何显示正确的答案。在这个应用程序中,在测验屏幕中包含几个可能答案的问题(四个答案选项),在这里我显示问题和uilabel中没有问题计数和uibuttons标题标签中设置的四个答案选项。我设置了每个按钮的标签值。在按钮动作中(这里我为所有四个按钮设置了常用按钮动作方法)我根据比较按钮标题标签字符串和正确答案数组值,设置背景图像以获得正确答案和错误答案。但即使我点击了错误的答案,我也无法解决如何显示正确答案的问题。

如果有人知道解决方案,请指导我,我将非常感谢你。

    - (void)loadDictionary
{
    quizzDict = [NSDictionary dictionaryWithObjectsAndKeys:[NSArray arrayWithObjects:@"France, Allemagne, Royaume-Uni",@"1/5",@"Quels sont les trois pays formant la Triple Entente ?",@"France, Royaume-Uni, Russie",@"France, Allemagne, Royaume-Uni",@"France, Italie, Royaume-Uni",@"France, Italie, Royaume-Uni", nil],@"1",[NSArray arrayWithObjects:@"les Carpates",@"2/5",@"Lequel de ces chaînes de montagnes n'est pas français?",@"les Alpes",@"les Vosges",@"les Carpates",@"les Pyrénées", nil],@"2",[NSArray arrayWithObjects:@"la mer Baltique",@"3/5",@"Lequel de ces plans d'eau ne borde pas la France?",@"la mer Baltique",@"la Méditerrannée",@"La Manche",@"l'Atlantique", nil],@"3",[NSArray arrayWithObjects:@"Bordeaux, Marseille, Lille",@"4/5",@"Les trois plus grandes villes françaises sont",@"Paris, Lyon, Marseille",@"Paris, Lille, Marseille",@"Paris, Marseille, Bordeaux",@"Bordeaux, Marseille, Lille", nil],@"4",[NSArray arrayWithObjects:@"is gaining",@"5/5",@"Le territoire de la forêt française",@"is gaining",@"is shrinking",@"is staying the same",@"is unknown", nil],@"5", nil];
    NSLog(@"the dic value = %@",quizzDict);
}

#pragma mark - Scroll - Slider

- (void)loadScrollViewContents
{
    [questionslbl removeFromSuperview];
    pageOfScroll            = 0;

    for (int i=0; i<[quizzDict allKeys].count;i++)
    {
        questionslbl = [[UILabel alloc] initWithFrame:CGRectMake(i*240, 0, 240, questionScrollView.frame.size.height)];
        [questionslbl setTag:i];
        [questionslbl setBackgroundColor:[UIColor clearColor]];
        [questionScrollView addSubview:questionslbl];
        [questionScrollView setBackgroundColor:[UIColor clearColor]];

        NSArray *quesArr = [quizzDict valueForKey:[NSString stringWithFormat:@"%d",(i+1)]];
        NSString *string = [quesArr objectAtIndex:2];
        UILabel *templbl = [[UILabel alloc] initWithFrame:CGRectMake(0 , 0, 240, 42)];
        [templbl setNumberOfLines:2];
        [templbl setText:NSLocalizedString(string, @"")];
        [templbl setTextColor:LIGHT_YELLOW_COLOR];
        [templbl setFont:MRSEAVES_BOLD(17)];
        [questionslbl addSubview:templbl];
    }
     [questionScrollView setContentSize:CGSizeMake((questionScrollView.frame.size.width*[quizzDict allKeys].count), questionScrollView.frame.size.height)];
}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    pageOfScroll          = scrollView.contentOffset.x/scrollView.frame.size.width;

    NSArray *quesArr      = [quizzDict valueForKey:[NSString stringWithFormat:@"%d",(pageOfScroll+1)]];
    NSString *countstr    = [quesArr objectAtIndex:1];
    [questionCountlbl              setText:NSLocalizedString(countstr, @"")];
    [questionCountlbl              setFont:MRSEAVES_BOLD(22)];

    NSString *ans1        = [quesArr objectAtIndex:3];
    [answerBtnOne                  setTitle:NSLocalizedString(ans1, @"") forState:UIControlStateNormal];
    [answerBtnOne.titleLabel       setFont:MRSEAVES_BOLD(15)];

    NSString *ans2        = [quesArr objectAtIndex:4];
    [answerBtnTwo                  setTitle:NSLocalizedString(ans2, @"") forState:UIControlStateNormal];
    [answerBtnTwo.titleLabel       setFont:MRSEAVES_BOLD(15)];

    NSString *ans3        = [quesArr objectAtIndex:5];
    [answerBtnThree                  setTitle:NSLocalizedString(ans3, @"") forState:UIControlStateNormal];
    [answerBtnThree.titleLabel       setFont:MRSEAVES_BOLD(15)];

    NSString *ans4        = [quesArr objectAtIndex:6];
    [answerBtnFour                  setTitle:NSLocalizedString(ans4, @"") forState:UIControlStateNormal];
    [answerBtnFour.titleLabel       setFont:MRSEAVES_BOLD(15)];
}

- (IBAction)AnswerBtnAction:(UIButton *)sender
{
    NSLog(@"Tag value = %ld",(long)[sender tag]);
    NSArray  *quesArr      = [quizzDict valueForKey:[NSString stringWithFormat:@"%d",(pageOfScroll+1)]];
    NSString *countstr     = [quesArr objectAtIndex:0];

    NSArray *optionsArr = [NSArray arrayWithObjects:answerBtnOne.titleLabel.text,answerBtnTwo.titleLabel.text,answerBtnThree.titleLabel.text,answerBtnFour.titleLabel.text, nil];
    NSLog(@"optionsArr = %@",optionsArr);

    int answeredOption = [optionsArr containsObject:countstr];
    answeredOption ++ ;

    if([sender tag] == 1001)
    {
        if([answerBtnOne.titleLabel.text isEqualToString:countstr])
        {
            [answerBtnOne   setBackgroundImage:[UIImage imageNamed:@"quiz_list_green.png"] forState:UIControlStateNormal];
            [answerBtnTwo   setUserInteractionEnabled:NO];
            [answerBtnThree setUserInteractionEnabled:NO];
            [answerBtnFour  setUserInteractionEnabled:NO];
            [UIView animateWithDuration:0.25 animations:^{nextBtn.alpha = 1.0;}];
        }
        else
        {
            [answerBtnOne setBackgroundImage:[UIImage imageNamed:@"quiz_list_red.png"] forState:UIControlStateNormal];
        }
    }
    else if([sender tag] == 1002)
    {
        if([answerBtnTwo.titleLabel.text isEqualToString:countstr])
        {
            [answerBtnTwo   setBackgroundImage:[UIImage imageNamed:@"quiz_list_green.png"] forState:UIControlStateNormal];
            [answerBtnOne   setUserInteractionEnabled:NO];
            [answerBtnThree setUserInteractionEnabled:NO];
            [answerBtnFour  setUserInteractionEnabled:NO];
            [UIView animateWithDuration:0.25 animations:^{nextBtn.alpha = 1.0;}];
        }
        else
        {
            [answerBtnTwo setBackgroundImage:[UIImage imageNamed:@"quiz_list_red.png"] forState:UIControlStateNormal];
        }
    }
    else if([sender tag] == 1003)
    {
        if([answerBtnThree.titleLabel.text isEqualToString:countstr])
        {
            [answerBtnThree setBackgroundImage:[UIImage imageNamed:@"quiz_list_green.png"] forState:UIControlStateNormal];
            [answerBtnOne   setUserInteractionEnabled:NO];
            [answerBtnTwo   setUserInteractionEnabled:NO];
            [answerBtnFour  setUserInteractionEnabled:NO];
            [UIView animateWithDuration:0.25 animations:^{nextBtn.alpha = 1.0;}];
        }
        else
        {
            [answerBtnThree setBackgroundImage:[UIImage imageNamed:@"quiz_list_red.png"] forState:UIControlStateNormal];
        }
    }
    else if([sender tag] == 1004)
    {
        if([answerBtnFour.titleLabel.text isEqualToString:countstr])
        {
            [answerBtnFour   setBackgroundImage:[UIImage imageNamed:@"quiz_list_green.png"] forState:UIControlStateNormal];
            [answerBtnOne    setUserInteractionEnabled:NO];
            [answerBtnTwo    setUserInteractionEnabled:NO];
            [answerBtnThree  setUserInteractionEnabled:NO];
            [UIView animateWithDuration:0.25 animations:^{nextBtn.alpha = 1.0;}];
        }
        else
        {
            [answerBtnFour setBackgroundImage:[UIImage imageNamed:@"quiz_list_red.png"] forState:UIControlStateNormal];
        }
    }
}

上面在vieDidLoad中调用了loadDictionary和loadScrollViewContents方法。

loadScrollView方法用于显示从右到左的幻灯片的问题。

我曾经在滚动委托方法中显示问题计数和四个答案选项。

最后的AnswerBtnAction是所有四个答案按钮的常用操作方法。

请点击错误的答案按钮,提出如何显示正确答案的建议。

1 个答案:

答案 0 :(得分:-1)

首先,你的代码真的难以阅读。

其次,您应首先更改quizzDict,这会使您的代码变得混乱。像这样的东西

aQuestion = @{@“questionNumber” : NSInteger,
        @“question” : NSString,
        @“answers” : NSArray of answers,
        @“correctAnswer” : NSInteger};

quizzArray = NSArray of aQuestion;

然后您可以使用

访问aQuestion中的每个值

quizzArray[i][@"questionNumber"]

这应该会让事情变得更容易。

当用户选择一个选项时,您可以设置UIButton.tag = 1 or 2 or 3 or 4

-(void)selectAnAnswer:(UIButton *)sender
{
    if (sender.tag == [quizzArray[i][@“correctAnswer”] integerValue]) //i is number of question
    {
        //go to next question
    } else {
        //show correct answer
    }
}