swift - 是否有一个函数可以用来查找按下了哪个 UIButton 并返回 true 或 false?

标签 swift uibutton

我创建了一个测试测验,其中有 3 个问题,您必须选择正确的按钮。显示的每个按钮都有一个带有正确答案的选项。因此,用户应该选择正确的按钮,并且在调试区域中它会告知。

但是,我点击哪个按钮并不重要。我得到同样的答案,“糟糕”。

谁能帮我解决这个问题吗?

......

这是我的 QuestionBrain swift 文件。

struct Quiz {

     let userQuestions = [

        Questions(q: "2 + 2", button1: "4", button2: "6", a: "4"),
        Questions(q: "20 x 2", button1: "10", button2: "40", a: "40"),
        Questions(q: "10 - 5", button1: "3", button2: "5", a: "5")

       ]

    var questionNumber = 0



    //Check answers
    func checkAnswer(_ userAnswer: String) -> String{


        if userAnswer == userQuestions[questionNumber].a {

            return "True"
        }


        else {

            return "False"
        }

    }

}

来 self 的 viewController 的主要代码。

class ViewController: UIViewController {

    @IBOutlet weak var questionLabel: UILabel!

    @IBOutlet weak var headerLabel: UILabel!

    @IBOutlet weak var leftButtonLabel: UIButton!

    @IBOutlet weak var rightButtonLabel: UIButton!


    var appQuiz = Quiz()


    @IBAction func userAnswerButton(_ sender: UIButton) {

        let userAnswer = sender.currentTitle!
        let questionAnswer = appQuiz.checkAnswer(userAnswer)



        if userAnswer == questionAnswer {

                   print("True")
               }

               else {
                   print("sucks")
               }

        appQuiz.getNextQuestion()

        nextQuestion()

    }


    func nextQuestion(){

        headerLabel.text = appQuiz.getQuestionText()
        questionLabel.text = appQuiz.getQuestionAmount()
        leftButtonLabel.setTitle(appQuiz.getButtonText1(), for: .normal)
        rightButtonLabel.setTitle(appQuiz.getButtonText2(), for: .normal)

    }


}

我的问题在这里:

@IBAction func userAnswerButton(_ sender: UIButton) {

        let userAnswer = sender.currentTitle!
        let questionAnswer = appQuiz.checkAnswer(userAnswer)



        if userAnswer == questionAnswer {

                   print("True")
               }

               else {
                   print("sucks")
               }

        appQuiz.getNextQuestion()

        nextQuestion()

    }

最佳答案

只需将sender 与按钮进行比较即可:

if sender === leftButtonLabel {
   // left clicked
} else {
   // right clicked
}

关于您的问题结构,最好说出哪个答案是正确的,而不是重复它:

Questions(q: "2 + 2", button1: "4", button2: "6", leftCorrect: true)

然后检查正确答案将如下完成:

let leftClicked = (sender === leftButtonLabel)
let correct = (leftClicked == userQuestions[questionNumber].leftCorrect)

实际上,稍微扩展一下多个答案,它可能看起来像这样:

Questions(q: "2 + 2", possibleAnswers: ["4", "6"], correctIndex: 0]

struct Questions {
    let q: String
    let possibleAnswers: [String]
    let correctIndex: Int
}

将按钮放入数组中:

var answerButtons: [UIButton] {
    return [leftButtonLabel, rightButtonLabel]
}

设置问题:

for (possibleAnswer, button) in zip(question.possibleAnswers, buttons) {
   button.setTitle(possibleAnswer, for: .normal)
}

并检查正确答案:

let buttonIndex = buttons.index(of: sender) ?? 0
let answeredCorrectly = (question.correctIndex == buttonIndex)

关于swift - 是否有一个函数可以用来查找按下了哪个 UIButton 并返回 true 或 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58561587/

相关文章:

swift - 拖动 map View 时停止更新位置

ios - 获取在 QLPreview Controller 中显示的 PDF 的尺寸

iphone - 通过代码关闭警报 View

iphone - 将存储在 IBAction 中的值传递给下一个 Nib UITextField。

ios - 自定义 UIButton @IBDesignable

swift - 类型转换为 NSMutableDictionary 返回 nil

ios - XCode 在尝试使用私有(private) Pod 内定义的协议(protocol)时显示 'Use of undeclared type' (Swift)

ios - 无法更改 View Controller 属性的实例

iphone - UIActivityIndi​​catorView 无响应

ios - 如何在表格 View 中创建单选按钮