我有一个带有UITableViewCell的UITableView,我想通过点击它来选择它们,然后再通过点击它们取消选择它们。 首先,我尝试了
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
// code
}
但是我注意到当你在一个单元格上第二次点击时,这个功能不会被执行;单击另一个单元格时会执行此操作。 但是我希望您可以点击几个单击它们时单击它们的单元格。
所以我制作了这段代码(简化):
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Selected")
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! LektionTableViewCell
if cell.accessoryType == .none {
print("Type = none")
cell.accessoryType = .checkmark
Lektion.insert(Dateien[indexPath.row], at: Lektion.count)
} else if cell.accessoryType == .checkmark {
print("Type = check")
cell.accessoryType = .none
Lektion.remove(at: indexPath.row)
}
}
但它无法正常工作:
有人能帮助我吗?
答案 0 :(得分:0)
从didSelect
方法中删除以下代码,因为dequeReusableCell
不应在cellForRowAtIndexPath
之外使用。
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! LektionTableViewCell
if cell.accessoryType == .none {
print("Type = none")
cell.accessoryType = .checkmark
Lektion.insert(Dateien[indexPath.row], at: Lektion.count)
} else if cell.accessoryType == .checkmark {
print("Type = check")
cell.accessoryType = .none
Lektion.remove(at: indexPath.row)
}
您可以使用cellForRowAtIndexPath
idSelectRow
获取单元格实例
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: IndexPath) as? LektionTableViewCell {
// Perform your operations here.....
}
}
现在,您的查询解决方案,单击时不会调用didSelect的解决方案(除非您选择另一行)。 允许对表格视图进行多项选择。
注意:在表数组中使用flag(boolean)变量来设置表加载数据时的选择状态。
答案 1 :(得分:0)
我无法评论,所以我在这里添加。
从您的代码中我们不知道您存储数据的位置以填充您的单元格。所以我不知道这是否可以帮助你,但假设你有一个包含你的对象的数组,一种方法是设置一个" isSelected"对didSelectRowAt indexPath
方法上的对象变量,然后调用tableview.reloadData()
。像这样:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
myObjects[indexPath.row].isSelected = !myObjects[indexPath.row].isSelected
tableView.reloadData()
}
然后在cellForRowAtIndexPath
方法中,当您创建单元格时,您可以轻松地将accessoryType设置为.checkmark或.none,具体取决于对象的标记。
像这样:
cell.accessoryType = myObjects[indexPath.row].isSelected ? .checkMark : .none
希望有所帮助。