gpt4 book ai didi

ios - swift: tableview didDeselectRowAt 复选标记

转载 作者:可可西里 更新时间:2023-11-01 02:01:07 24 4
gpt4 key购买 nike

当我使用 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")
}
}

最佳答案

正如我在评论中所说,您需要从 didDeselectRowAt 方法中删除这一行 tableView.cellForRow(at: indexPath)?.accessoryType = .none 并添加这一行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")
}

关于ios - swift: tableview didDeselectRowAt 复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46281809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com