Как вы сохраняете ответы пользователей, полученные из текстового поля в tableView, с помощью Swift

Я сделал небольшую викторину, в которой tableView содержит разные вопросы и ответы в виде меток и текстовых полей.

вопросы и ответы на tableView

Если введен правильный ответ, ячейка tableView становится зеленой, устанавливается TextField Text, и текстовое поле становится недоступным для редактирования.

ячейка правильного ответа

Моя проблема в том, что ни одна из этих настроек не сохраняется. Мне нужно, чтобы он запомнил, правильно ли был дан ответ на вопрос, и соответственно изменил ячейку. Я знаю, что могу использовать Core Data или User Defaults для сохранения вещей, но я не уверен, как сохранить конкретные ячейки, на которые был дан правильный ответ.

Мой код ниже:

TableViewController

import UIKit

class TableViewController: UITableViewController, UITextFieldDelegate {

    let questions = ["what is 3 + 5", "what is the meaning of life","what 
    is the number from the jim carrey movie"]
    let answers = ["8","42","23"]

    var textfieldColor = UIColor(red:0.98, green:0.23, blue:0.42, 
    alpha:1.0)
    var textFieldText = ""
    var isTextFieldEditable = true

    override func viewDidLoad() {
        super.viewDidLoad()


    }

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




    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return answers.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Answers", for: indexPath) as! TableViewCell

        cell.question.text = questions[indexPath.row]

        cell.backgroundColor = textfieldColor
        cell.answerOutlet.text = textFieldText
        cell.isUserInteractionEnabled = isTextFieldEditable

        cell.answerOutlet.delegate = self
        return cell
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool
    {

        print(answers.contains(textField.text!))
        if answers.contains(textField.text!)
        {
            textfieldColor = UIColor.green
            textFieldText = textField.text!
            isTextFieldEditable = false

            let rowNumber = answers.index(of: textField.text!)
            let indexPath = IndexPath(item: rowNumber!, section: 0)
            tableView.reloadRows(at: [indexPath], with: .top)
        }
       return true
    }



}

ТаблицаViewCell:

import UIKit

class TableViewCell: UITableViewCell {
    @IBOutlet weak var question: UILabel!
    @IBAction func Answer(_ sender: UITextField)
    {
    }
    @IBOutlet weak var answerOutlet: UITextField!


    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

Спасибо за помощь.


person lisen kaci    schedule 14.08.2017    source источник
comment
когда вы имеете в виду сохранение, вы имеете в виду, что данные сохраняются даже после перезапуска приложения?   -  person koropok    schedule 14.08.2017


Ответы (1)


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

correct[rowNumber!] = true
UserDefaults.standard.set(correct, forKey: "Correct")

Затем измените загрузку таблицы в tableView с помощью массива:

if correct[indexPath.row] == false {

        cell.backgroundColor = textfieldColor1
        cell.answerOutlet.text = textFieldText
        cell.isUserInteractionEnabled = isTextFieldEditable
        }

        if correct[indexPath.row] == true {

            cell.backgroundColor = textfieldColor2
            cell.answerOutlet.text = answers[indexPath.row]
            cell.isUserInteractionEnabled = false
        }

и, наконец, проверяйте каждый раз, когда вы загружаете представление, внутри viewDidLoad, чтобы увидеть, есть ли какие-либо результаты, сохраненные в UserDefaults:

if let corretAnswers = UserDefaults.standard.object(forKey: "Correct") {
        correct = corretAnswers as! [Bool]
        }
person Enrique    schedule 14.08.2017
comment
Забыл сказать вам; вам нужно инициализировать правильный массив с повторением: false count: 3 - person Enrique; 14.08.2017