Как сохранить галочку в Swift?

#swift #xcode #uitableview #core-data #nsuserdefaults

#swift #xcode #uitableview #core-data #nsuserdefaults

Вопрос:

Я создаю приложение todo для себя, и я хотел создать функцию, которая отмечала бы задачу как выполненную. Он добавляет галочку, и шрифт должен стать серым, но я новичок в кодировании, поэтому я действительно не знаю, как сохранить цвет шрифта и галочку в памяти. Я не знаю, должен ли я сохранить ее в userdefaults или core data и, самое главное, как ее сохранить. Любая помощь очень ценится.

Вот код: я хочу сохранить textColor и accesoryType

 func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let done = UIContextualAction(style: .normal, title: "Done") { (action, view, nil) in
        print("Done")
        tableView.cellForRow(at: indexPath)?.textLabel?.textColor = UIColor.lightGray
       tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
    }
    done.backgroundColor = .blue
    let config = UISwipeActionsConfiguration(actions: [done])
    config.performsFirstActionWithFullSwipe = false
    return config           
}
  

Ответ №1:

В вашей модели данных добавьте свойство

 var isDone : Bool = false
  

В cellForRow установите пользовательский интерфейс в соответствии с этим свойством (предполагая, что datasourceArray это массив источников данных)

 let item = datasourceArray[indexPath.row]
cell.textColor = item.isDone ? .lightGray : .blue
cell.accessoryType = item.isDone ? .checkmark : .none
  

В действии установите для isDone свойства значение true и перезагрузите строку.

 let done = UIContextualAction(style: .normal, title: "Done") { (action, view, nil) in
    print("Done")
    self.datasourceArray[indexPath.row].isDone = true
    self.tableView.reloadRows(at: [indexPath], with: .none)
}
  

и удалить

 done.backgroundColor = .blue
  

Комментарии:

1. Большое вам спасибо за ваш ответ, но я не понимаю первый шаг. Остальное я понимаю, но как мне добавить переменную isDone : Bool = false в модель данных?

2. Модель данных — это тип в массиве источника данных, предпочтительно структура или класс.

3. Хорошо, я это сделал, но теперь отображается ошибка. «Значение типа ‘NSManagedObject’ не имеет элемента ‘isDone'» в ячейке.textColor = item.isDone.

4. Вы должны добавить isDone атрибут as Bool в объект Core Data.

5. В зависимости от настроек создания кода объекта вы можете добавить @NSManaged свойство вручную в NSManagedObject подкласс,

Ответ №2:

Вы можете добавить задачу со статусом переменной: Bool? сохраните ее в базе данных. Вы можете установить галочку со статусом с помощью setup (статус) Надеюсь, вам поможет!