Edit- Как я могу добавить, что если ответ неправильный, он станет красным и зеленым в правильном ответе? Swift 4.2 - PullRequest
1 голос
/ 27 июня 2019

Создает игру-викторину

Как добавить, что если ответ неправильный, неправильный ответ станет красным, а правильный ответ станет зеленым одновременно?

Как можноЯ заставляю цвета исчезать, когда приходит новый вопрос?У меня так получается, что когда вы нажимаете ответ, сразу после этого появляется новый вопрос

РЕДАКТИРОВАТЬ: Этот код работает нормально.

@IBOutlet var options: [UIButton]!
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var progressView: UIView!

var allQuestions = QuestionBank()
var Number: Int = 0
var selectedAnswer: Int = 0

override func viewDidLoad() {
    super.viewDidLoad()
    oppdatertekst()
    options.forEach {
        $0.layer.cornerRadius = 20
        $0.backgroundColor = UIColor.orange
        $0.setTitleColor(UIColor.black, for: .normal)
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


@IBAction func answerPressed(_ sender: UIButton) {
    feedback()
    if sender.tag == selectedAnswer {
        sender.backgroundColor = UIColor.green
        let riktig = NSLocalizedString("Quiz.riktig", comment: "")
        ProgressHUD.showSuccess(riktig)
    } else if let correctOption = options.first(where: { $0.tag == selectedAnswer }) {
        let feilnr = NSLocalizedString("Quiz.feilnr", comment: "")
        ProgressHUD.showError("\(feilnr)\(selectedAnswer)")
        correctOption.backgroundColor = UIColor.green
        sender.backgroundColor = UIColor.red
    }
    DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
        self.Number += 1
        self.oppdatertekst()
    }
}

func oppdaterSpm() {
if Number <= allQuestions.list.count - 1{
    questionLabel.text = allQuestions.list[Number].question
    options.forEach {                
        $0.backgroundColor = .white
    }
    options[0].setTitle(allQuestions.list[Number].optionA, for: .normal)
    options[1].setTitle(allQuestions.list[Number].optionB, for: .normal)
    options[2].setTitle(allQuestions.list[Number].optionC, for: .normal)
    options[3].setTitle(allQuestions.list[Number].optionD, for: .normal)
    selectedAnswer = allQuestions.list[Number].correctAnswer
} else {
    let alert....
}

}

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Вы должны написать UIButton изменения в общем методе. Звони куда угодно.

Когда приходит новый вопрос:

func whenNewQuestionComes() {

    optionA.layer.cornerRadius = 20
    optionA.backgroundColor = UIColor.orange
    optionA.setTitleColor(UIColor.black, for: .normal)
    optionB.layer.cornerRadius = 20
    optionB.backgroundColor = UIColor.orange
    optionB.setTitleColor(UIColor.black, for: .normal)
    optionC.layer.cornerRadius = 20
    optionC.backgroundColor = UIColor.orange
    optionC.setTitleColor(UIColor.black, for: .normal)
    optionD.layer.cornerRadius = 20
    optionD.backgroundColor = UIColor.orange
    optionD.setTitleColor(UIColor.black, for: .normal)

}

Показать зеленый и красный

@IBAction func answerPressed(_ sender: UIButton) {
    feedback()

    optionA.backgroundColor = UIColor.red
    optionB.backgroundColor = UIColor.red
    optionC.backgroundColor = UIColor.red
    optionD.backgroundColor = UIColor.red

    if sender.tag == selectedAnswer {
        sender.backgroundColor = UIColor.green
        let riktig = NSLocalizedString("Quiz.riktig", comment: "")
        ProgressHUD.showSuccess(riktig)
    } 
    /*
    else if let correctOption = options.first(where: { $0.tag == selectedAnswer }) {
        let feilnr = NSLocalizedString("Quiz.feilnr", comment: "")
        ProgressHUD.showError("\(feilnr)\(selectedAnswer)")
        correctOption.backgroundColor = UIColor.green
        sender.backgroundColor = UIColor.red
    }
    */
    DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
        self.Number += 1
        self.oppdatertekst()
    }
}
0 голосов
/ 27 июня 2019

Вместо четырех IBOutlet используйте IBOutletCollection и подключите эти четыре кнопки к этой коллекции.

В методе answerPressed, если выбран правильный ответ, измените цвет нажатой кнопки на зеленый. Если выбран неправильный ответ, измените выбранный цвет ответа на красный, затем выберите нужную кнопку ответа из коллекции и измените ее цвет на зеленый. Через 5 секунд перезагрузите следующий вопрос.

class ViewController: UIViewController {

    @IBOutlet var options: [UIButton]!
    @IBOutlet weak var questionLabel: UILabel!
    @IBOutlet weak var progressView: UIView!

    var allQuestions = QuestionBank()
    var Number: Int = 0
    var selectedAnswer: Int = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        oppdatertekst()
        options.forEach {
            $0.layer.cornerRadius = 20
            $0.backgroundColor = UIColor.orange
            $0.setTitleColor(UIColor.black, for: .normal)
        }
    }
    @IBAction func answerPressed(_ sender: UIButton) {
        feedback()
        if sender.tag == selectedAnswer {
            sender.backgroundColor = UIColor.green
            let riktig = NSLocalizedString("Quiz.riktig", comment: "")
            ProgressHUD.showSuccess(riktig)
        } else if let correctOption = options.first(where: { $0.tag == selectedAnswer }) {
            let feilnr = NSLocalizedString("Quiz.feilnr", comment: "")
            ProgressHUD.showError("\(feilnr)\(selectedAnswer)")
            correctOption.backgroundColor = UIColor.green
            sender.backgroundColor = UIColor.red
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
            Number += 1
            oppdatertekst()
        }        
    }
}

Изменить цвет всех кнопок в oppdaterSpm методе

func oppdaterSpm() {
    if Number <= allQuestions.list.count - 1{
        questionLabel.text = allQuestions.list[Number].question
        options.forEach {                
            $0.backgroundColor = .white
        }
        options[0].setTitle(allQuestions.list[Number].optionA, for: .normal)
        options[1].setTitle(allQuestions.list[Number].optionB, for: .normal)
        options[2].setTitle(allQuestions.list[Number].optionC, for: .normal)
        options[3].setTitle(allQuestions.list[Number].optionD, for: .normal)
        selectedAnswer = allQuestions.list[Number].correctAnswer
    } else {
        let alert....
    }
}
...