Вставка новой строки в tableview дублирует последнюю строку - PullRequest
0 голосов
/ 11 июля 2020

Когда я вставляю новую строку с помощью tableView.insertRows, по какой-то причине иногда вставляется новая строка, которая является дубликатом последней строки, а иногда это работает должным образом, вставляя только что добавленную строку. Я действительно запутался ... что я делаю не так?

var list: Results<Item>?
var selectedCategory: Category = Category()

selectedCategory значение будет установлено в предыдущем контроллере представления

override func viewDidLoad() {
    super.viewDidLoad()
    list = selectedCategory.items.sorted(byKeyPath: "title")
}
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoItemCell", for: indexPath)
        if let item = list?[indexPath.row] {
            cell.textLabel?.text = item.title
            cell.accessoryType = item.done ? .checkmark : .none
        }
        return cell
    }
    @IBAction func addNewItem(_ sender: UIBarButtonItem) {
        let newItem = Item()
        var textField = UITextField()
        
        let alert = UIAlertController(title: "Add New To Do", message: nil, preferredStyle: .alert)
        alert.addTextField { item in
            textField = item
        }
        let action = UIAlertAction(title: "Add", style: .default) { action in
            newItem.title = textField.text!
            try! self.realm.write {
                self.selectedCategory.items.append(newItem)
                self.realm.add(newItem)
            }
            let pos = self.list!.count-1
            self.tableView.insertRows(at: [IndexPath.init(row: pos , section: 0)], with: .left)
        }
        alert.addAction(action)
        present(alert, animated: true, completion: nil)
    }

1 Ответ

0 голосов
/ 11 июля 2020

В классе ячейки добавьте метод prepareForReuse () и очистите содержимое ячейки. Должно помочь.

Apple Do c

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