多项选择测验:需要将每个按钮的标题设置为每个问题的多项选择答案

时间:2019-06-19 22:11:14

标签: ios swift

我正在开发多项选择测验。所有数据都通过json进行解析。我有5个问题,每个问题有5个多项选择答案。目前,我设置了问题编号,带有说明的问题标题,并为每个问题设置了5个按钮。

它正在处理一个异常。每个按钮都显示相同的问题,而不是每个单独的问题。我假设我需要创建一个循环遍历问题并将其附加到每个按钮的循环,但是在弄清楚这个问题时遇到了麻烦。

以下是我所看到的示例:

multiple choice quiz screen shot

这是我编写的代码:

@IBOutlet weak var progressView: UIView!
@IBOutlet weak var questionCounter: UILabel!
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var questionNumber: UILabel!
@IBOutlet weak var questionTitle: UILabel!
@IBOutlet weak var questionText: UILabel!
@IBOutlet weak var optionA: UIButton!
@IBOutlet weak var optionB: UIButton!
@IBOutlet weak var optionC: UIButton!
@IBOutlet weak var optionD: UIButton!
@IBOutlet weak var optionE: UIButton!

//Below is for parsed json data version
var allQuestions = [Questions]()
var questionNumbers: Int = 0
var AnswerQuestions: Int = 0
var selectedAnswer: Int = 0

func updateUI() {

    self.questionNumber.text = String(surveyQuestions?.questions[questionNumbers].questionNumber ?? 0)

    self.questionTitle.text = surveyQuestions?.questions[questionNumbers].category.name

    self.questionText.text = surveyQuestions?.questions[questionNumbers].text

    self.questionText.text = surveyQuestions?.questions[questionNumbers].text.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)


    optionA.setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[AnswerQuestions].text, for: UIControl.State.normal)
    optionB.setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[AnswerQuestions].text, for: UIControl.State.normal)
    optionC.setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[AnswerQuestions].text, for: UIControl.State.normal)
    optionD.setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[AnswerQuestions].text, for: UIControl.State.normal)
    optionE.setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[AnswerQuestions].text, for: UIControl.State.normal)

    print("Success")

}

根据我收集到的信息,有几种方法可以做到这一点。

for button in question {
button.setTitle(question?.questions[number].text, for: UIControl.State.normal)
}

for i in 0...<button.count {
button.setTitle(question?.questions[number].text, for: UIControl.State.normal)
}

如果有人可以帮助我,那就太好了。

谢谢,如果您需要更多详细信息或信息,我可以提供。

1 个答案:

答案 0 :(得分:2)

您为answerChoices初始= 0的所有选项设置AnswerQuestions数组的第一个索引,相反,您需要

optionA.setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[0].text, for: .normal)
optionB.setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[1].text, for: .normal)
optionC.setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[2].text, for: .normal)
optionD.setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[3].text, for: .normal)
optionE.setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[4].text, for: .normal)

如果您创建了IBOutlet集合,它将更加容易

@IBOutlet var allOptions: [UIButton]!

并钩住所有按钮,在这种情况下,您可以

allOptions.indices.forEach { allOptions[$0].setTitle(surveyQuestions?.questions[questionNumbers].answerChoices[$0].text, for:.normal)  }