我想让用户多选(年)或选择(全部),其余的单元格消失(选中标记)。 我希望用户无法取消每个(复选标记)。
这是我的代码: -
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
cell?.accessoryType = .checkmark
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! yearsCell
cell.years?.text = Years[indexPath.row]
return cell }
答案 0 :(得分:3)
我这样做的方法是将selectedindexPath
存储在一个数组中,然后重新加载tableView
以更改所选的单元格,这样可以避免细胞重新出现问题 - 使用,这可能看起来像这样(未经测试)。
var selectedIndexPathArray = Array<NSIndexPath>()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
selectedIndexPathArray.append(indexPath)
tableView.reloadData()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! yearsCell
cell.years?.text = Years[indexPath.row]
cell.accessoryType = .none
for sip in selectedIndexPathArray {
if indexPath == sip {
cell.accessoryType = .checkmark
}
}
return cell
}
答案 1 :(得分:1)
喜欢如此:
SWIFT 3
// To checkmark the cell
let cell = tableView.cellForRow(at:indexPath.row)
cell.accessoryType = .checkmark
// To make it unselectable
使用tableView:willSelectRowAtIndexPath:
方法,检查indexPath.row
是否是您刚选择的单元格的行,return false
。
答案 2 :(得分:0)
细胞可重复使用。例如,用于显示第1行的单元格可用于在向下滚动时显示第10行。因此,您需要一个数组存储每行的复选标记状态,一些代码如:
更多:谷歌如何以及为什么在tableview中重用单元格