如何解决选择 TableView 单元格会在多个部分的行中激活复选标记
I've implemented checkmarks (when row is selected) with the following code in cellForRowAt
:
// Add a checkmark to row when selected
if selectedIngredients.contains(indexPath.row) {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
但是,当我选择一行时,每个部分的 index.row 会得到复选标记:
这似乎是因为我只指定了 indexPath.row,而不是部分。我该如何编码,以便仅我选择的部分中的选定行获得复选标记?
解决方法
使用数据存储保存这样的复选标记:
var selectedIngredients: Set<IndexPath> = [] // use set for unique save
然后 didSelect 回调:
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath){
if self.selectedIngredients.contains(indexPath) {
self.selectedIngredients.remove(indexPath)
} else {
self.selectedIngredients.insert(indexPath)
}
self.tableView.reloadData()
}
在 CellForRow 中重新加载后:
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if selectedIngredients.contains(indexPath) {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
}
如果您希望它只有一行包含复选标记:
var selectedIngredients: IndexPath? = nil
和 didSelect 回调:
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath){
self.selectedIngredients = indexPath
}
最后:
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if selectedIngredients == indexPath {
cell.accessoryType = .checkmark
} else {
cell.accessoryType = .none
}
}
,
你应该在 didSelect 中添加复选标记并在 didDeselect 方法中删除它们;
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath){
// update cell here
}
func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
// update cell here
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。