Wenn ich meine Tabellenansicht mit einem searchController neu lade, sehe ich die Benutzer, die ausgewählt sind, weil ich sie in einem Array (utentiSelezionati) hinzugefügt habe und ich habe eine Überprüfung durchgeführt. Aber um sie abzuwählen, muss ich zweimal tippen und ich kann nicht verstehen warum. Es scheint, dass selbst wenn es ausgewählt ist, es die Methode didSelect aufruft.swift: tableview didDeselectRowAt Häkchen
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "UserTableViewCell", for: indexPath)
cell.accessoryType = cell.isSelected ? .checkmark : .none
cell.selectionStyle = .none // to prevent cells from being "highlighted"
if let c = cell as? UserTableViewCell {
let utente = self.utenti[indexPath.row]
c.textLabel?.text = utente.name
c.detailTextLabel?.text = utente.email
if utentiSelezionati.contains(where: {$0.id == utente.id}){
cell.accessoryType = cell.isSelected ? .checkmark : .checkmark
}
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let utente = self.utenti[indexPath.row]
tableView.cellForRow(at: indexPath)?.accessoryType = .checkmark
if !self.utentiSelezionati.contains(where: {$0.id == utente.id}){
self.utentiSelezionati.append(utente)
print("premuto aggiungi")
}
print("something")
}
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
tableView.cellForRow(at: indexPath)?.accessoryType = .none
let utente = self.utenti[indexPath.row]
print("premuto rimuovi")
if let index:Int = self.utentiSelezionati.index(where: {$0.id == utente.id}) {
self.utentiSelezionati.remove(at: index)
print(utente.id! ," rimosso")
}
}
Haben Sie 'allowsMultipleSelection' auf' true '? – the4kman
ja ich tat, danke – HaVaNa7
Ich denke, Sie müssen Ihren modifizierten Indexpfad in didDeselectRowAt Methode –