gpt4 book ai didi

swift - 使用 SearchBar 时,复选标记与 TableView 中的错误行相关联

转载 作者:行者123 更新时间:2023-11-28 14:48:40 25 4
gpt4 key购买 nike

我正在创建一个应用程序,当用户在 TableView 中搜索一个项目时,他们可以点击它并且它旁边会出现一个复选标记。但是,假设当我选择我搜索的第一个项目并单击它然后删除我的搜索时,复选标记保留在第一行但是对于一个完全不同的对象,我搜索,开始(见下图)。

When Searching

When not Searching

var searchingArray = [Symptoms]()
var filteredArray = [Symptoms]()

var selectedSymptoms = [Symptoms]()

var clicked = [String]()

var searchingUnderWay = false

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

if let cell = searchingSymptomsTableView.dequeueReusableCell(withIdentifier: "ExtraSymptoms", for: indexPath) as? ExtraSymptomCell {

let searchingArrays: Symptoms!

if searchingUnderWay {

searchingArrays = self.filteredArray[indexPath.row]


} else {

searchingArrays = self.searchingArray[indexPath.row]

}

cell.updateUI(symptomNames: searchingArrays)

return cell

} else {

return UITableViewCell()
}


}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

let selectedRow: Symptoms!

let symptomName: String!

let cell : UITableViewCell = tableView.cellForRow(at: indexPath)!

if searchingUnderWay {

selectedRow = filteredArray[indexPath.row]
symptomName = filteredArray[indexPath.row].name as String

if clicked.contains(symptomName) {

cell.accessoryType = .none

let indexNumber = clicked.index(of: symptomName)
clicked.remove(at: indexNumber!)

if let element = selectedSymptoms.index(where: { $0.name == selectedRow.name }) {

selectedSymptoms.remove(at: element)
}

} else {

clicked.append(symptomName)

cell.accessoryType = .checkmark

searchingSymptomsTableView.reloadData()

selectedSymptoms.append(selectedRow)

}



} else {

selectedRow = searchingArray[indexPath.row]
symptomName = searchingArray[indexPath.row].name as String

if clicked.contains(symptomName) {

cell.accessoryType = .none

let indexNumber = clicked.index(of: symptomName)
clicked.remove(at: indexNumber!)

if let element = selectedSymptoms.index(where: { $0.name == selectedRow.name }) {

selectedSymptoms.remove(at: element)
}

} else {

clicked.append(symptomName)

cell.accessoryType = .checkmark

searchingSymptomsTableView.reloadData()

selectedSymptoms.append(selectedRow)

}


print(clicked)
print(selectedSymptoms)



}

}

我希望当您删除搜索时,我使用搜索栏搜索的项目仍然处于选中状态。

非常感谢

最佳答案

欢迎使用 TableViewController 逻辑。看起来真的很奇怪,但它工作正常)您需要覆盖 ExtraSymptomCell 中的 prepareForReuse() 方法。并清除您的单元格包含的所有值,包括 accessoryType

override func prepareForReuse() {
super.prepareForReuse()

accessoryType = .none
}

在你的 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath):

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = searchingSymptomsTableView.dequeueReusableCell(withIdentifier: "ExtraSymptoms", for: indexPath) as? ExtraSymptomCell {

let symptomName: String!

let searchingArrays: Symptoms!

if searchingUnderWay {

searchingArrays = self.filteredArray[indexPath.row]
symptomName = filteredArray[indexPath.row].name as String

} else {

searchingArrays = self.searchingArray[indexPath.row]
symptomName = filteredArray[indexPath.row] as String
}

cell.updateUI(symptomNames: searchingArrays)

if clicked.contains(symptomName) {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}

return cell

} else {

return UITableViewCell()
}
}

关于swift - 使用 SearchBar 时,复选标记与 TableView 中的错误行相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50026345/

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