swift 当按钮被选中时如何在测验中检查答案

rqdpfwrv  于 2023-05-05  发布在  Swift
关注(0)|答案(2)|浏览(149)

我是Swift和Coding的新手。我的英语不是很好,所以提前道歉!我想开发一个Quiz App。现在我在检查正确答案时遇到了一些麻烦,因为我的uibuttons可以被选择。原因是我想有多个答案,多个选择和多个正确答案。
我不知道什么样的我的代码Informationen你需要从我这里,但我会张贴我的意思是它可以帮助.
非常感谢您提前为您的帮助!!!
班级

import Foundation

class Quiz {
    
    let question: String
    let options : [String]
    let correctAnswer: [String]
    
    init(question: String, options: [String], correctAnswer: [String]) {
        self.question = question
        self.options = options
        self.correctAnswer = correctAnswer
    }
    
    func validateOption(_ index: Int) -> Bool {
        
        let answer = options[index]
        return answer == correctAnswer[index]
        
    }
    
    deinit {
        
    }
    }

我的Viewcontroller

import UIKit

class ViewController: UIViewController {
   
    @IBOutlet weak var quenstionLabel: UILabel!
    @IBOutlet var answerButton: [UIButton]!
    
    let quizManager = QuizManager()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        getNewQuiz()
        
    }
    
    @IBAction func checkAnswerButtonTapped(_ sender: UIButton) {
        
    }
    
   
    
    @IBAction func checkMarkAnswerClicked(_ sender: UIButton) {
       
        if sender.isSelected {
            sender.isSelected = false
            
        } else {
            sender.isSelected = true
        }
    }

还有我的测验管理员

import Foundation

class QuizManager {
    
    private var quiz: Quiz!
    private var _totalAnswers = 0
    private var _totalCorrectAnswers = 0
    
    var question: String {
        return quiz.question
    }
    
    var options: [String] {
        return quiz.options
    }
    
    var totalAnswers: Int {
        return _totalAnswers
    }
    var totalCorrectAnswers: Int {
        return _totalCorrectAnswers
    }
    
    func refreshQuiz(){
        let randomIndex = Int(arc4random_uniform(UInt32(quizes.count)))
        let quizData = quizes[randomIndex]
        quiz = Quiz(question: quizData.question, options: quizData.options, correctAnswer: quizData.correctAnswer)
    }
    
    func validateAnswer(index: Int){
        _totalAnswers += 1
        if quiz.validateOption(index){
            _totalCorrectAnswers += 1
        }
    }

如果有需要更多的信息,请让我知道!!
如果有人能帮我就太好了。

bvpmtnay

bvpmtnay1#

您可以按照以下步骤解决此问题。
1.在“问题课堂”中为您的答案添加数组。
1.第二个在单元格类中添加委托,它将通知视图控制器
1.在视图控制器中实现委托并将答案附加到模型中。
1.在检查按钮点击简单地比较您的正确答案数组点击答案数组.
//第1步var myAnswers:[String]

protocol CheckAnswerDelegate : class {
     func didPressOptionButton(myAnswer: String)
 }

@IBAction func buttonPressed(_ sender: UIButton) {
            checkAnswerDelegate?.didPressOptionButton(myAnswer: self.answerButton.titleLabel?.text ?? "")
        }

class ViewController: UIViewController,UITableViewDelegate, UITableViewDataSource, CheckAnswerDelegate {}

func didPressOptionButton(myAnswer: String) {
        if question1.myAnswers.contains(myAnswer) {
            if let firstIndex = question1.myAnswers.firstIndex(where: {$0 == myAnswer}) {
                question1.myAnswers.remove(at: firstIndex)
            }
        }else {
            question1.myAnswers.append(myAnswer)
        }
        self.answerView.reloadData()
    }
kq0g1dla

kq0g1dla2#

我会把你所有的答案按钮列成一个列表。然后,在checkAnswerButtonTapped中,您可以运行该列表,查看其中哪些isSelected设置为true。

for button in buttonList {
     var answersSelected = []
     if button.isSelected {
          answersSelected.append(button.text) 
          // You may want something different here depending on how the buttons store the answer options
     }
}

完成后,将它们与QuizManager中预定义的正确答案进行比较。
你可以做的另一件事,使你的生活更容易一点是使用.toggle()函数与您的布尔变量。基本上,它只是切换变量的值。因此在checkMarkAnswerClicked中,您可以只使用sender.isSelected.toggle()

相关问题