有没有一种方法可以更改一组按钮上的文本输入?

时间:2019-04-19 18:11:25

标签: swift xcode

我对swift和Xcode还是比较陌生,我正在开发一个测验应用程序,它将对每个问题有三个答案(一个正确,两个不正确)。到目前为止,我已经设法将答案链接到三个按钮,在这些按钮上,当按下正确的按钮时,它将在我的代码中注册为正确的答案。但是,对于每个问题,按钮一总是正确的答案,按钮二总是错误的答案一,按钮三总是错误的答案二,那么有没有办法改变这个问题,所以对每个问题都是随机的?谢谢

由于我是新手,所以我不知道如何将按钮标题随机化,所以还没有尝试过

//更新按钮标题的代码

questionLabel.text = allQuestions.questions[questionNumber].question
buttonOne.setTitle(allQuestions.questions[questionNumber].answer, for: .normal)
buttonTwo.setTitle(allQuestions.questions[questionNumber].falseAnswerOne, for: .normal)
buttonThree.setTitle(allQuestions.questions[questionNumber].falseAnswerTwo, for: .normal)

//保存每个问题和答案信息的代码

class QuestionBank {

var questions = [Question]()

init() {
    questions.append(Question(text: "Question", correctAnswer: "X", wrongAnswerOne: "Y", wrongAnswerTwo: "Z"))
}

1 个答案:

答案 0 :(得分:0)

我建议将您的Question模型更改为以下形式:

struct Question {
    let text: String
    var answers: [Answer]
}

enum Answer {
    case correct(String)
    case wring(String)
}

let question = Question(text: "Question", answers: [.correct("X"), .wrong("Y"), .wrong("Z")]

要处理正确和错误的答案,您需要告诉按钮它连接的答案类型。因此,您不仅需要在按钮(标题)中保存答案文本,还需要保存答案类型。

要实现此目的,您可以使用变量UIButton创建自定义的answer: Answer子类。

class AnswerButton: UIButton {
    var answer: Answer! {
        didSet {
            configureTitle()
        }
    }

    private func configureTitle() {
        switch answer {
            case .correct(let title):
                setTitle(title, for: .normal)
            case .wrong(let title):
                setTitle(title, for: .normal)
        }
    }
}

因此,在为按钮分配答案之前,您需要洗净答案并按索引分配它们。

var question = allQuestions.questions[questionNumber]
question.answers.shuffle()
questionLabel.text = question.text
buttonOne.answer = question.answers[0]
buttonTwo.answer = question.answers[1]
buttonThree.answer = question.answers[2]

我认为您在Storyboard中有一些按钮,因此您的按钮IBAction将是:

@IBAction private func guess(_ sender: AnswerButton) {
    switch sender.answer {
        case .correct:
            // Handle correct answer
        case .wrong:
            // Handle wrong answer
    }
}