【问题标题】:Showing different colours for UIButtons on press within IBAction for a Quiz在 IBAction 中为测验显示不同颜色的 UIButtons
【发布时间】:2015-03-12 11:33:28
【问题描述】:

我有四个 UIButtons 代表 4 个答案。我设法把所有东西都连接起来,用绿色显示正确答案,用红色显示错误答案。

我唯一的问题是当用户选择了错误的答案时,我会将所有答案都显示为灰色。我也想向用户展示正确的答案。我尝试过 else if 语句,但遗漏了一些东西,有什么建议吗?

-(IBAction)Answer1:(id)sender{

    if (Answer1Correct == YES) {
        [Answer1 setTitle:@"Correct" forState:UIControlStateNormal];
        [Answer1 setBackgroundColor:[UIColor greenColor]];
        [self RightAnswer];
    }
    else{

        [Answer1 setBackgroundColor:[UIColor redColor]];
        [Answer1 setTitle:@"Incorrect" forState:UIControlStateNormal];
        [Answer2 setBackgroundColor:[UIColor colorWithRed:102.0/255.0 green:102.0/255.0 blue:102.0/255.0 alpha:1.0f]];
        [Answer3 setBackgroundColor:[UIColor colorWithRed:102.0/255.0 green:102.0/255.0 blue:102.0/255.0 alpha:1.0f]];
        [Answer4 setBackgroundColor:[UIColor colorWithRed:102.0/255.0 green:102.0/255.0 blue:102.0/255.0 alpha:1.0f]];
        [self WrongAnswer];
    }
}

【问题讨论】:

  • 您是否为每个按钮编写单独的代码??
  • 而您正在存储 4 个布尔值 Answer-x-correct 以知道哪个是正确答案,对吧?
  • 是的,我正在为每个按钮编写单独的代码@ShahiM

标签: ios objective-c xcode if-statement uibutton


【解决方案1】:

最好的方法是从UIButton继承。创建类QuizQuestionButton 这个类将有方法 -setCorrectAnswer:(NSString *)correctAnswer-setRealAnswer:(NSString *)realAnswer

如果两者相同 - 将背景颜色设置为绿色,否则设置为红色。

-(void)setCorrectAnswer:(NSString *)correctAnswer {
     _correctAnswer = correctAnswer;
}

-(void)setRealAnswer:(NSString *)realAnswer {
    if (realAnswer == _correctAnswer) {
        self.backgroundColor = [UIColor greenColor];
    } else {
        self.backgroundColor = [UIColor redColor];
    }
}

还阅读了设计模式 - 策略。这种模式可以帮助您避免 if-else 语句。

【讨论】:

  • 谢谢帕维尔,但这并不能回答我关于将剩余按钮变灰的问题......
  • @user4625544 您可以根据自己的要求进行修改。但这是最好的方法。
【解决方案2】:

试试这个:

 if (Answer1Correct == YES) {
    [Answer1 setTitle:@"Correct" forState:UIControlStateNormal];
    [Answer1 setBackgroundColor:[UIColor greenColor]];
    [self RightAnswer];
}
else{

    [Answer1 setBackgroundColor:[UIColor redColor]];

    [Answer2 setBackgroundColor:[UIColor greyColor]];
    [Answer3 setBackgroundColor:[UIColor greyColor]];
    [Answer4 setBackgroundColor:[UIColor greyColor]];

    if(Answer2isCorrect)
      { [Answer2 setBackgroundColor:[UIColor greenColor]]; }
    else if(Answer3isCorrect)
      { [Answer3 setBackgroundColor:[UIColor greenColor]]; }
    else if(Answer4isCorrect)
      { [Answer4 setBackgroundColor:[UIColor greenColor]]; }
}

如果选择的答案是错误的,首先将所有其他按钮设置为灰色,然后找到正确的答案并将其更改为绿色。

您可能还希望在单击答案后禁用所有按钮以防止再次单击。

【讨论】:

  • 嗨 ShahiM - 谢谢你,但这只显示绿色表示正确答案,灰色表示不正确答案。如果您再次阅读问题,它会说红色表示不正确,绿色表示正确,如果未点击则灰色...
  • 非常感谢ShahiM!标记为正确。
猜你喜欢
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 2017-11-02
  • 1970-01-01
  • 2019-03-11
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多