【发布时间】:2018-10-30 18:18:39
【问题描述】:
在我的应用程序中,我有一个多选和全选选项,我已经尝试使用下面的代码,但面临选择问题。
如果我按 selectAll,它会清楚地检查和取消检查,如果假设,我选择它选择的单个选择,但所选单元格没有突出显示。
谁能帮我弄清楚。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.array.count
}
在 cellForRowAtIndexPath 中,
let cell = self.multipleSelectionTableview.dequeueReusableCell(withIdentifier:multiSelectionIdentifier , for: indexPath) as! MultipleSelectionCell
if self.selectedRows.contains(indexPath){
cell.checkBoxBtn.isSelected = true
cell.checkBoxBtn.setImage(UIImage.init(named: "check"), for: .normal)
} else {
cell.checkBoxBtn.isSelected = false
cell.checkBoxBtn.setImage(UIImage.init(named: "uncheck"), for: .normal)
}
if self.multipleSelectionStatusBtn.isSelected == true {
self.multipleSelectionStatusBtn.isSelected = true
cell.checkBoxBtn.setImage(UIImage.init(named: "check"), for: .normal)
} else {
self.multipleSelectionStatusBtn.isSelected = false
cell.checkBoxBtn.setImage(UIImage.init(named: "uncheck"), for: .normal)
}
cell.checkBoxBtn.tag = indexPath.row
return cell
在复选框选择方法中,
let selectedIndexPath = IndexPath(row: sender.tag, section: 0)
self.multipleSelectionTableview.deselectRow(at: selectedIndexPath, animated: true)
if self.selectedRows.contains(selectedIndexPath)
{
self.selectedRows.remove(at: self.selectedRows.index(of: selectedIndexPath)!)
}
else
{
self.selectedRows.append(selectedIndexPath)
print(self.selectedRows)
}
self.multipleSelectionTableview.reloadData()
在 selectAll 方法中,
if (sender.isSelected == true)
{
sender.setImage(UIImage(named: "uncheck"), for: .normal)
sender.isSelected = false;
// isSelecting = false
self.selectedRows = self.getAllIndexpaths()
self.multipleSelectionTableview.reloadData()
}
else
{
// isSelecting = true
sender.setImage(UIImage(named: "check"), for: .normal)
sender.isSelected = true;
self.selectedRows = self.getAllIndexpaths()
self.multipleSelectionTableview.reloadData()
}
对于getAllIndexPaths方法,
func getAllIndexpaths() -> [IndexPath] {
var indexPaths: [IndexPath] = []
for j in 0..<self.multipleSelectionTableview.numberOfRows(inSection: 0) {
indexPaths.append(IndexPath(row: j, section: 0))
}
return indexPaths
}
【问题讨论】:
-
你可以实现
willSelectRowAt:的tableview委托方法并改变单元格背景颜色, -
检查你的 cellForRowAtIndexPath 一次,你验证了多个条件
-
确保已设置 tableView.allowsMultipleSelection = true
-
@Anbu.karthik 在单选后不会调用该单元格,但所选状态将附加到所选行的数组中。
-
@HAK 已启用多选状态。
标签: ios swift uitableview multipleselection selectall