IOS Обновление заголовка кнопки и обновление массива значением кнопки? - PullRequest
0 голосов
/ 28 октября 2019

Я новичок в IOS Development и внедряю приложение IOS QUIZ.

Как обновить вопрос и ответы в приложении QUIZ.

Пожалуйста, проверьте ниже мой код, это то, как я отображаю.

 @IBOutlet weak var prevBtn: UIButton!
    @IBOutlet weak var nxtBtn: UIButton!
    @IBOutlet weak var qstnlbl: UILabel!

    @IBOutlet weak var answerABtn: UIButton!
    @IBOutlet weak var answerBBtn: UIButton!
    @IBOutlet weak var answerCBtn: UIButton!
    @IBOutlet weak var answerDBtn: UIButton!

    let questions = ["How many days are there in 1 year?", "Favorite color?", "Where was I born?"]
    let answers = [["360", "365", "384", "377"], ["blue", "black", "green", "orange"], ["Tokyo", "New York", "Tennessee", "rajahmundry"]]

    //Variables
    var currentQuestion = 0
    var rightAnswerPlacement:UInt32 = 0
    var points = 0;

    //Label
    @IBOutlet weak var lbl: UILabel!

    //Button
    @IBAction func action(_ sender: AnyObject)
    {
        if (sender.tag == Int(rightAnswerPlacement))
        {
            print ("RIGHT!")
            points += 1
        }
        else
        {
            print ("WRONG!!!!!!")
        }

        if (currentQuestion != questions.count)
        {
            newQuestion()
        }

    }

    @IBAction func preAction(_ sender: AnyObject)
    {


        if (currentQuestion != questions.count)
        {
            newQuestion()
        }
       currentQuestion =  currentQuestion - 1


    }
    @IBAction func nxtaction(_ sender: AnyObject)
    {
        if (currentQuestion != questions.count)
        {
            newQuestion()
        }

       currentQuestion =  currentQuestion + 1

    }

    override func viewDidAppear(_ animated: Bool)
    {
        newQuestion()
    }

    //Function that displays new question
    func newQuestion()
    {
        qstnlbl.text = questions[currentQuestion]

        rightAnswerPlacement = arc4random_uniform(3)+1

        //Create a button
        var button:UIButton = UIButton()

        var x = 1

        for i in 1...4
        {
            //Create a button
            button = view.viewWithTag(i) as! UIButton
            button.setTitle(answers[currentQuestion][x], for: .normal)
                            x = 2

        }
        currentQuestion += 1
    }

на основе ответов, выбранных пользователем, необходимо добавить в answerArray.

Например: если пользователь выбирает в первом вопросе в answerABtn вариант ответа «A», answerArray должен обновляться с «A"значение.

пользователь может обновить ответ

для примера: пользователь выбирает первый вариант ответа на вопрос" b "answerArray должен обновить значение" b ".

пожалуйстапомогите мне сделать это приложение викторины.

интерфейс приложения викторины

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Есть довольно много вещей, которые вы должны делать по-другому, но чтобы помочь вам в этом ...

Вы захотите создать переменную answerArray для хранения выбранных пользователем ответов. Внутри action функции вы уже отслеживаете, какая кнопка была нажата, поэтому добавьте заголовок кнопки в массив ответов в той же точке.

Ваши текущие действия previous и next не делаютв любом случае, потому что вы не правильно отслеживаете количество вопросов и выбираете случайный «правильный» ответ каждый раз.

Вот ваш код, модифицированный для:

  • лучшеУвеличение количества вопросов
  • отслеживание выбранных пользователем ответов в answerArray
  • очистка экрана после завершения теста

Примечание: это всего лишь пример кода ... это не следует считать «все исправлено», но это должно помочь вам в этом шаге. Просмотрите комментарии, которые я добавил к вашему коду.

class QuizViewController: UIViewController {

    @IBOutlet weak var prevBtn: UIButton!
    @IBOutlet weak var nxtBtn: UIButton!
    @IBOutlet weak var qstnlbl: UILabel!

    @IBOutlet weak var answerABtn: UIButton!
    @IBOutlet weak var answerBBtn: UIButton!
    @IBOutlet weak var answerCBtn: UIButton!
    @IBOutlet weak var answerDBtn: UIButton!

    let questions = ["How many days are there in 1 year?", "Favorite color?", "Where was I born?"]
    let answers = [["360", "365", "384", "377"], ["blue", "black", "green", "orange"], ["Tokyo", "New York", "Tennessee", "rajahmundry"]]

    //Variables
    var currentQuestion = 0
    var rightAnswerPlacement:UInt32 = 0
    var points = 0;

    // array to hold answers
    var answerArray: [String] = [String]()

    //Label
    @IBOutlet weak var lbl: UILabel!

    //Button
    @IBAction func action(_ sender: AnyObject)
    {
        // make sure this came from a button, and get the button title
        guard let btn = sender as? UIButton,
            let btnTitle = btn.currentTitle else { return }

        if (btn.tag == Int(rightAnswerPlacement))
        {
            print ("RIGHT!")
            points += 1
        }
        else
        {
            print ("WRONG!!!!!!")
        }

        // append the selected answer to the answerArray
        answerArray.append(btnTitle)

        // increment question counter
        currentQuestion += 1

        // if there are more questions
        if (currentQuestion < questions.count)
        {
            newQuestion()
        }
        else
        {
            quizComplete()
        }

    }

    func quizComplete() -> Void {
        [answerABtn, answerBBtn, answerCBtn, answerDBtn].forEach {
            $0?.isHidden = true
        }
        qstnlbl.text = "Your score: \(points)"
    }

    // these two funcs do not make any sense as written
/*
    @IBAction func preAction(_ sender: AnyObject)
    {
        if (currentQuestion != questions.count)
        {
            newQuestion()
        }
        currentQuestion =  currentQuestion - 1
    }
    @IBAction func nxtaction(_ sender: AnyObject)
    {
        if (currentQuestion != questions.count)
        {
            newQuestion()
        }
        currentQuestion =  currentQuestion + 1
    }
*/

    override func viewDidAppear(_ animated: Bool)
    {
        newQuestion()
    }

    //Function that displays new question
    func newQuestion()
    {
        qstnlbl.text = questions[currentQuestion]

        rightAnswerPlacement = arc4random_uniform(3)+1

        for i in 1...4
        {
            // get a reference to a button
            let button = view.viewWithTag(i) as! UIButton
            button.setTitle(answers[currentQuestion][i-1], for: .normal)

        }

        // don't increment question count here
        // increment it AFTER user answers the question (in button tap action)
        //currentQuestion += 1
    }

}
0 голосов
/ 28 октября 2019

здесь вы идете:

import UIKit

class ViewController: UIViewController {

  var emptyArray : [String] = []

  override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = .red

  }

  @objc func buttonAction(sender: UIButton!) {
    emptyArray.append("A")
    print(emptyArray)
  }

  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    let button = UIButton()
    button.frame = CGRect(x: self.view.frame.size.width - 300, y: 200, width: 100, height: 100)
    button.backgroundColor = UIColor.blue
    button.setTitle("Name your Button ", for: .normal)
    button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
    self.view.addSubview(button)
  }

}

enter image description here

когда вы нажимаете кнопку снова и снова, вывод в окно отладки будет таким

["A"]
["A", "A"]
["A", "A", "A"]
["A", "A", "A", "A"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...