Загрузить следующий вопрос в массиве с помощью TableView с настраиваемыми ячейками и кнопкой «Далее» - PullRequest
1 голос
/ 08 мая 2020

Я новичок в программировании и мне трудно перейти к следующему вопросу / ответам в моем массиве викторин с использованием TableView с настраиваемыми ячейками и кнопкой «Далее».

Мои настройки:

  1. Раскадровка: ViewController с контроллером TableView и кнопкой «Далее»
  2. Пользовательские ячейки: созданы из файлов xib
  3. Массив вопросов с переменной «questionNumber», которую я хочу обновить

Сделанные шаги:

  1. Я могу загрузить первый элемент в массиве
  2. Создана кнопка «Далее», которая добавляет 1 к questionNumber через переменную «index»

Как мне:

  1. Передать это новое значение обратно моему классу, чтобы обновить там questionNumber &
  2. Обновить мой tableView со следующими данными в массиве

Массив

struct DataBrain {

var questionNumber: Int? = 0

var dataArray: [MultipleChoice] = [MultipleChoice(question: "What force is opposite to gravity?", options: ["Lift", "Thrust", "Drag", "Gravity"], rightAnswer: "Lift"), MultipleChoice(question: "What is 1 x 3", options: ["1", "2", "3", "4"], rightAnswer: "3"), MultipleChoice(question: "What does MEA stand for?", options: ["My Eating Area", "My Entering Area", "Minimum Entering Area", "None of the above"], rightAnswer: "None of the above")

Контроллер представления с табличным представлением, настраиваемыми ячейками и кнопкой «Далее»

    class MultipuleChoiceViewController: UIViewController {


    @IBOutlet weak var nextButton: LongButtons!

    @IBOutlet weak var table: UITableView!

    var dataBrain = DataBrain()

    override func viewDidLoad() {
        super.viewDidLoad()

        table.dataSource = self
        table.delegate = self

        table.register(QuestionTableViewCell.nib(), forCellReuseIdentifier: QuestionTableViewCell.identifier)
        table.register(AnswerTableViewCell.nib(), forCellReuseIdentifier: AnswerTableViewCell.identifier)

    }

    @IBAction func nextButtonPressed(_ sender: Any) {

        if var index = dataBrain.questionNumber {
            if index + 1 < dataBrain.dataArray.count {

                index += 1

           } else {
                performSegue(withIdentifier: "MultipleChoiceToResults", sender: self)
           }

        }
    }
}

// MARK: - TableView DataSource:

extension MultipuleChoiceViewController: UITableViewDataSource {

    //Number of Rows:
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        if let index = dataBrain.questionNumber {
            let data = dataBrain.dataArray[index]
            if let count = data.options?.count {
                return count + 1
            }
        }
        return 0
    }

    //Return a Cell:
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if indexPath.row == 0 {

            let cell = tableView.dequeueReusableCell(withIdentifier: QuestionTableViewCell.identifier) as! QuestionTableViewCell

            if let index = dataBrain.questionNumber {
                let data = dataBrain.dataArray[index]
                cell.questionLabel.text = data.question
                print (dataBrain.dataArray[index])
            }

            return cell

        } else {

            let cell = tableView.dequeueReusableCell(withIdentifier: AnswerTableViewCell.identifier) as! AnswerTableViewCell

            if let index = dataBrain.questionNumber {
                let data = dataBrain.dataArray[index]
                cell.answerLabel.text = data.options![indexPath.row - 1]
            }

            return cell

        }
    }
}

// MARK: - TableView Delegate

extension MultipuleChoiceViewController: UITableViewDelegate {

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    }
}

1 Ответ

1 голос
/ 08 мая 2020

Обновите селектор кнопки «Далее»

@IBAction func nextButtonPressed(_ sender: Any) {

        if var index = dataBrain.questionNumber {
            if index + 1 < dataBrain.dataArray.count {

              index += 1
              dataBrain.questionNumber = index
              table.reloadData()

           } else {
                performSegue(withIdentifier: "MultipleChoiceToResults", sender: self)
           }

        }
...