UITableView
checkmark
正在取消选择
代码
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return dizi.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
cell.textLabel?.text=dizi[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
if tableView.cellForRow(at: indexPath)?.accessoryType == UITableViewCellAccessoryType.checkmark
{
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.none
}
else
{
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
}
}
我该如何解决?请帮帮我。
答案 0 :(得分:0)
因为您还需要在UITableViewCellAccessoryType
中设置cellForRowAt
。因为如果使用向上/向下滚动表,那么单元格将被重用。
怎么做?获取一个数组相同大小的行,并使用值0重复,当您检查任何行,然后使用indexPath.row
更新值1,如果取消选中任何行,则使用indexPath.row
更新值0
并在cellForRowAt
方法return cell
之前将条件设置为
if checkUncheckArr[indexPath.row] == 0 {
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.non
}
else {
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
}
答案 1 :(得分:0)
多数民众赞成在UITableView Cell中滚动时会重复使用它,并确保它在重用时恢复其UI状态
因此,创建一个数组来保存选定的indexPath
var selectedIndex : [IndexPath]! = [IndexPath]()
在cellForRowAtIndexPath
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
if if selectedIndex.contains(indexPath) {
cell.accessoryType = UITableViewCellAccessoryType.checkmark
}
else {
cell.accessoryType = UITableViewCellAccessoryType.none
}
cell.textLabel?.text=dizi[indexPath.row]
return cell
}
最后更新selectedIndexArray
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
if tableView.cellForRow(at: indexPath)?.accessoryType == UITableViewCellAccessoryType.checkmark
{
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.none
self.selectedIndex = selectedIndex.filter({
return $0 != indexPath
})
}
else
{
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCellAccessoryType.checkmark
self.selectedIndex.append(indexPath)
}
}