Полагаю, все, что вы сейчас делаете, это устанавливаете галочку в своей ячейке.Ячейка будет использоваться повторно, и вы потеряете галочку.
Что вам нужно сделать, это отслеживать элементы, например, в Set
, которые пользователь проверил до сих пор.После рендеринга элементов в табличном представлении вам необходимо проверить этот набор, проверен ли элемент.Если это так, вы захотите добавить галочку в ячейку.
Что-то вроде этого, где Item
- это модель вашей ячейки.Это должно начать вас.Вы должны иметь возможность расширить это на набор данных с группами для заголовков таблиц.
/// The items that have been checked.
var checkedItems = Set<Item>()
/// All items that are shown when no search has been performed.
var allItems: [Item]
/// The currently displayed items, which is the same as `allItems` in case no
/// search has been performed or a subset of `allItems` in case a search is
/// currently active.
var displayedItems: [Item]
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let item = displayedItems[indexPath.row]
let cell = // Construct your cell as usual.
if checkedItems.contains(item) {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let item = displayedItems[indexPath.row]
if checkedItems.contains(item) {
checkedItems.remove(item)
cell.accessoryType = .none
} else {
checkedItems.insert(item)
cell.accessoryType = .checkmark
}
}
func updateSearchResults(for searchController: UISearchController) {
displayedItems = // Set the displayed items based on the search text.
tableView.scrollRectToVisible(.zero, animated: false)
tableView.reloadData()
}