Я новичок в программировании и мне трудно перейти к следующему вопросу / ответам в моем массиве викторин с использованием TableView с настраиваемыми ячейками и кнопкой «Далее».
Мои настройки:
- Раскадровка: ViewController с контроллером TableView и кнопкой «Далее»
- Пользовательские ячейки: созданы из файлов xib
- Массив вопросов с переменной «questionNumber», которую я хочу обновить
Сделанные шаги:
- Я могу загрузить первый элемент в массиве
- Создана кнопка «Далее», которая добавляет 1 к questionNumber через переменную «index»
Как мне:
- Передать это новое значение обратно моему классу, чтобы обновить там questionNumber &
- Обновить мой 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) {
}
}