当我使用searchController重新加载我的tableview时,我正确地看到那些被选中的用户,因为我将它们添加到数组中(utentiSelezionati)并且我执行了检查。但要取消选择它们,我必须点击两次,我无法理解为什么。似乎即使它被选中,也会调用didSelect方法。
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")
}
}
答案 0 :(得分:1)
正如我在评论中所说,您需要从tableView.cellForRow(at: indexPath)?.accessoryType = .none
方法中删除此行didDeselectRowAt
,并在tableView.reloadRows(at: [indexPath], with: .none)
行
print(utente.id! ," rimosso")
完整代码
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
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")
tableView.reloadRows(at: [indexPath], with: .none)
}
}
替代
从DidSelect和DidDeSelect中删除所有代码,并仅添加此didSelect实现
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let utente = self.utenti[indexPath.row]
if !self.utentiSelezionati.contains(where: {$0.id == utente.id}){
self.utentiSelezionati.append(utente)
print("premuto aggiungi")
}else{
if let index:Int = self.utentiSelezionati.index(where: {$0.id == utente.id}) {
self.utentiSelezionati.remove(at: index)
print(utente.id! ," rimosso")
}
}
tableView.reloadRows(at: [indexPath], with: .none)
print("something")
}
答案 1 :(得分:0)
尝试 Swift 3
的此代码func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
if (tableView.cellForRow(at: indexPath)?.accessoryType == UITableViewCellAccessoryType.checkmark)
{
//For removing check mark
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.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")
}
}
else
{
// For adding checkMark
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
let utente = self.utenti[indexPath.row]
if !self.utentiSelezionati.contains(where: {$0.id == utente.id})
{
self.utentiSelezionati.append(utente)
print("premuto aggiungi")
}
print("something")
}
}