是否有一个函数可以用来查找按下了哪个 UIButton 以及 return true 还是 false?
Is there a function I can use to find which UIButton was pressed and return true of false?
我创建了一个测试测验,其中有 3 个问题,您必须选择正确的按钮。每个按钮显示都有一个带有正确答案的选项。所以用户应该选择正确的按钮,然后在调试区域中它会通知。
但是我点击什么按钮并不重要。我得到相同的答案,"sucks"。
谁能帮我解决这个问题?
.........
这是我的 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"
}
}
}
来自我的 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
结构,最好说出哪个答案是正确的而不是重复它:
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)
我创建了一个测试测验,其中有 3 个问题,您必须选择正确的按钮。每个按钮显示都有一个带有正确答案的选项。所以用户应该选择正确的按钮,然后在调试区域中它会通知。
但是我点击什么按钮并不重要。我得到相同的答案,"sucks"。
谁能帮我解决这个问题?
.........
这是我的 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"
}
}
}
来自我的 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
结构,最好说出哪个答案是正确的而不是重复它:
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)