我有一个包含三个部分的表格视图。
第0,1节:在该节中选择一行。选定的行会出现一个选中标记。如果选择了新行,请取消选择并取消选中旧选择。
第2部分:按此部分中的一项进行自动搜索。
问题在于,当我在第2节中按一行时,出现一个选中标记,然后它出现了。我完全不希望选中标记出现,但我很难找到一种方法来消除它。
我在self.tableView.allowsMultipleSelection = true
中设置了viewDidLoad
,因此我可以在每个部分中选择一行,这对于前两个部分非常有用。
然后在cellForRowAt
中为第2节(第三节)设置cell.accessoryType = .none
,以便在该节中选择行时不会打勾。
似乎没有任何作用。
override func viewDidLoad() {
self.tableView.allowsMultipleSelection = true
}
override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
let section = indexPath.section
switch section {
case 0,1:
if let selected = tableView.indexPathsForSelectedRows {
for selectedIndexPath in selected {
if selectedIndexPath.section == indexPath.section {
tableView.deselectRow(at: selectedIndexPath, animated: false)
}
}
}
return indexPath
case 2:
return indexPath
default:
return nil
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "FilterTableViewCell", for: indexPath) as! FilterTableViewCell
let section = indexPath.section
switch section {
case 0:
cell.theLabel.text = myDataStuff[indexPath.row]
case 1:
cell.theLabel.text = otherDataStuff[indexPath.row]
case 2:
cell.theLabel.text = lastDataStuff[indexPath.row]
cell.accessoryType = .none
default:
break
}
return cell
}
答案 0 :(得分:1)
您的课程 FilterTableViewCell 中可能有类似的内容(也许下次共享更多代码):
override func setSelected(_ selected: Bool, animated: Bool) {
if selected {
self.accessoryType = .checkmark
}
else {
self.accessoryType = .none
}
}
因此,即使您在第3部分中的行具有 accessoryType = .none ,当您选择它们时,该属性也会再次修改。
快速的解决方案是使用这些功能来处理复选标记,而不是setSelected:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
}