Я не могу сохранить пользовательский ввод и добавить его в таблицу в функции textFieldShouldRetrun в таблицу в XCode, и я не могу понять, почему - PullRequest
0 голосов
/ 26 июня 2018

Я пытался целую вечность получить данные пользователя для сохранения и добавления в таблицу, чтобы их можно было использовать как список дел, но я не могу.Я пытался искать здесь, но ничто не помогло мне.Вот весь мой кодНа самом деле это мой первый раз, когда я использую Xcode и Swift, так что может быть какая-то очевидная ошибка, которую я пропустил.Проблема в начале функции textFieldShouldReturn (извините, я не объяснил это хорошо!)

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return todos.count
    }


    struct todo {
        var text: String
        var isDone: Bool
    }
// this is the problem area:

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        let t = todo(text: textField.text!, isDone: false)
        todos.append(t)        
        tableView.reloadData()
        textField.text = ""
        textField.resignFirstResponder()
        return true
    }

    var todos = [todo]()

    @IBOutlet weak var tableView: UITableView!


  // the rest

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        var todo = todos[indexPath.row]
        todo.isDone = !todo.isDone
        todos[indexPath.row] = todo
        tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)


    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let id = "todo-cell"
        let cell = tableView.dequeueReusableCell(withIdentifier: id, for: indexPath)
        let todo = todos[indexPath.row]
        cell.textLabel?.text = todo.text
        if todo.isDone {
            cell.accessoryType = .checkmark
        }else{
            cell.accessoryType = .none
        }
        return cell
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        let t = todo (text:"clean my room", isDone: false)
        todos.append(t)

    }
}

1 Ответ

0 голосов
/ 26 июня 2018

Глядя на свой код, предполагая, что это все, вы нигде не назначаете делегатов.В viewDidLoad() необходимо установить UITableViewDelegate, UITableViewDataSource и UITextFieldDelegate.

tableView.delegate = self
tabelView.dataSource = self
textField.delegate = self
...