【问题标题】:Highlighting the correct answer in a quiz app在测验应用程序中突出显示正确答案
【发布时间】:2016-01-27 08:23:45
【问题描述】:

我是 iOS 开发的新手,并且一直在学习一些在线课程。在其中一个中,我们开发了一个测验应用程序,我想通过改进该应用程序来提高我的技能,使其超出课程所涵盖的范围。

该应用使用 .json 文件作为问题和答案的“数据库”。这个 .json 文件如下所示...

  {
    "id" : "1",
    "question": "Earth is a:",
         "answers": [
        "Planet",
        "Meteor",
        "Star",
        "Asteroid"
      ],
      "difficulty": "1"
  }

...继续回答 500 多个问题。

目前,该应用会向用户提出一个包含四个可能答案的问题。在 .json 文件中,第一个答案始终是正确答案,但应用程序被编码为随机播放答案,因此正确答案并不总是排在第一位。

该应用程序还进行了编码,以便显示答案的四个按钮(我为按钮使用四种不同颜色的图像)被禁用,并且在用户做出选择后外观也会变暗,除了他们选择的按钮没有变暗以便他们的选择被突出显示。

我想做的是更改此设置,以突出显示正确答案的按钮,以通知用户正确答案是什么。

我正在使用以下代码来加载问题和答案并随机播放答案:

 func loadAllQuestionsAndAnswers()
    {
        let path = NSBundle.mainBundle().pathForResource("content", ofType: "json")
        let jsonData : NSData = NSData(contentsOfFile: path!)!
        allEntries = (try! NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers)) as! NSArray
        //println(allEntries)

    }


func loadQuestion(index : Int)
{
    let entry : NSDictionary = allEntries.objectAtIndex(index) as! NSDictionary
    let question : NSString = entry.objectForKey("question") as! NSString
    let arr : NSMutableArray = entry.objectForKey("answers") as! NSMutableArray

    //println(question)
    //println(arr)

    labelQuestion.text = question as String

    let indices : [Int] = [0,1,2,3]
    //let newSequence = shuffle(indices)
    let newSequence = indices.shuffle()
    var i : Int = 0
    for(i = 0; i < newSequence.count; i++)
    {
        let index = newSequence[i]
        if(index == 0)
        {
            // we need to store the correct answer index
            currentCorrectAnswerIndex =  i

        }

        let answer = arr.objectAtIndex(index) as! NSString
        switch(i)
        {
        case 0:
            buttonA.setTitle(answer as String, forState: UIControlState.Normal)
            break;

        case 1:
            buttonB.setTitle(answer as String, forState: UIControlState.Normal)
            break;

        case 2:
            buttonC.setTitle(answer as String, forState: UIControlState.Normal)
            break;

        case 3:
            buttonD.setTitle(answer as String, forState: UIControlState.Normal)
            break;

        default:
            break;
        }

目前我正在使用此代码检查答案:

var currentCorrectAnswerIndex : Int = 0



    func checkAnswer( answerNumber : Int)
    {
        if(answerNumber == currentCorrectAnswerIndex)
        {
            // we have the correct answer
            labelFeedback.text = "Correct! +1"
            labelFeedback.textColor = UIColor.greenColor()
            score = score + 1
            labelScore.text = "score: \(score)"
            SaveScore()
            // later we want to play a "correct" sound effect
            PlaySoundCorrect()

        }
        else
        {
            // we have the wrong answer
            labelFeedback.text = "Wrong answer"
            labelFeedback.textColor = UIColor.redColor()
            // we want to play a "incorrect" sound effect
            PlaySoundWrong()
        }

在突出显示按钮方面,我将使用编码,例如:

func resetAnswerButtons()
{
    buttonA.alpha = 1.0
    buttonB.alpha = 1.0
    buttonC.alpha = 1.0
    buttonD.alpha = 1.0
    buttonA.enabled = true
    buttonB.enabled = true
    buttonC.enabled = true
    buttonD.enabled = true
}

@IBAction func PressedButtonA(sender: UIButton) {
    print("button A pressed")
    buttonB.alpha = 0.3
    buttonC.alpha = 0.3
    buttonD.alpha = 0.3

    buttonA.enabled = false
    buttonB.enabled = false
    buttonC.enabled = false
    buttonD.enabled = false
     CheckAnswer(0)
}
@IBAction func PressedButtonB(sender: UIButton) {
    print("button B pressed")
    buttonA.alpha = 0.3
    buttonC.alpha = 0.3
    buttonD.alpha = 0.3

    buttonA.enabled = false
    buttonB.enabled = false
    buttonC.enabled = false
    buttonD.enabled = false
    CheckAnswer(1)
}

@IBAction func PressedButtonC(sender: UIButton) {
    print("button C pressed")
    buttonA.alpha = 0.3
    buttonB.alpha = 0.3
    buttonD.alpha = 0.3

    buttonA.enabled = false
    buttonB.enabled = false
    buttonC.enabled = false
    buttonD.enabled = false
    CheckAnswer(2)
}

@IBAction func PressedButtonD(sender: UIButton) {
    print("button D pressed")
    buttonA.alpha = 0.3
    buttonB.alpha = 0.3
    buttonC.alpha = 0.3

    buttonA.enabled = false
    buttonB.enabled = false
    buttonC.enabled = false
    buttonD.enabled = false
    CheckAnswer(3)
}

我无法理解的是如何编写应用程序代码以突出显示正确答案?目前,上面的代码通过调暗“其他”按钮的 alpha 来有效地突出显示按下的按钮。如何让应用程序识别哪个“随机播放”按钮包含正确答案并突出显示那个?

【问题讨论】:

  • OP,请停止滥用 xcode 标签。根据经验,在添加标签之前,请先将鼠标悬停在上面。
  • 糟糕!感谢您的提示。

标签: ios swift


【解决方案1】:

掷骰子时,请记住包含正确答案的按钮的索引。

此外,您可以将所有按钮放在一个数组中,并使用 forall 循环来操作所有按钮。这使得代码更加简洁,并且摆脱了奇怪的变量名和 switch case。

【讨论】:

    猜你喜欢
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多