Как сохранить статус checkMark для определенного UITableViewCell
У меня есть UITableView
в одной UIViewController
и я пытаюсь сохранить статус accessoryType, чтобы при перезагрузке приложения пользователь предварительно выбрал ячейки, используя NSUserDefault
должен отображаться с галочкой. Но проблема, с которой я сталкиваюсь, заключается в том, что когда я проверяю, совпадают ли данные ячейки с данными по умолчанию пользователя, некоторые ячейки, которые не были выбраны, также отображаются с галочкой, но этого не следует делать.
вот мои коды:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = newCategoriesTableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.backgroundColor = colorArray[indexPath.row]
let entry: Categories
if isFiltering() {
entry = filteredCategories[indexPath.row]
} else {
entry = categoryTitles[indexPath.row]
}
cell.selectionStyle = .none
cell.textLabel?.text = entry.name
cell.detailTextLabel?.text = entry.description
let defaults = UserDefaults.standard
if let userCategortList = defaults.object(forKey: "userCategoryList") as? [String]{
for category in userCategortList{
if(cell.textLabel?.text == category){
cell.accessoryType = .checkmark
break
}
}
}
return cell
}
2 ответа
Вероятно, это проблема повторного использования ячейки, поскольку вы снимаете с нее ячейки. Вы должны убедиться, чтобы установить cell.accessoryType = .none
для случаев, которые не установлены на галочку.
Попробуйте с приведенным ниже фрагментом.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = newCategoriesTableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.backgroundColor = colorArray[indexPath.row]
let entry: Categories
if isFiltering() {
entry = filteredCategories[indexPath.row]
} else {
entry = categoryTitles[indexPath.row]
}
cell.selectionStyle = .none
cell.textLabel?.text = entry.name
cell.detailTextLabel?.text = entry.description
let defaults = UserDefaults.standard
if let entry.name == (defaults.object(forKey: "userCategoryList") as? [String]){
cell.accessoryType = .checkmark
}
else{
cell.accessoryType = .none
}
return cell
}
Сохранить entry.name в пользовательских настройках по умолчанию.