#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 (статус) Надеюсь, вам поможет!