我正在开发多项选择测验。所有数据都通过json进行解析。我有5个问题,每个问题有5个多项选择答案。目前,我设置了问题编号,带有说明的问题标题,并为每个问题设置了5个按钮。
它正在处理一个异常。每个按钮都显示相同的问题,而不是每个单独的问题。我假设我需要创建一个循环遍历问题并将其附加到每个按钮的循环,但是在弄清楚这个问题时遇到了麻烦。
以下是我所看到的示例:
这是我编写的代码:
@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)
}
如果有人可以帮助我,那就太好了。
谢谢,如果您需要更多详细信息或信息,我可以提供。
答案 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) }