我正在使用复选标记功能选择表视图单元格,并且必须将该值保存在数组中(仅复选标记单元格名称),并且必须将这些数组值传递给url参数(POST)(例如:Dhoni,Kohili,Rohit )
这是我必须保存“ SwithTableView”单元格数据的代码
var checked = [Bool]()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == switchTableView{
return self.arrdata20.count
} else
{
return self.arrdata.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if (tableView == self.switchTableView)
{
let cell:switchTableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell1") as! switchTableViewCell
cell.nameLbl.text = (arrdata20[indexPath.row].name)
print(cell.nameLbl.text)
if (arrdata20[indexPath.row].emp_id == DataManager.sharedInstance.empID)
{
cell.isHidden=true
}
else{
cell.isHidden=false
}
if checked[indexPath.row] == false{
cell.accessoryType = .none
} else if checked[indexPath.row] {
cell.accessoryType = .checkmark
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switchTableView.deselectRow(at: indexPath, animated: true)
if let cell = switchTableView.cellForRow(at: indexPath as IndexPath) {
if cell.accessoryType == .checkmark {
cell.accessoryType = .none
checked[indexPath.row] = false
print(indexPath.row)
} else {
cell.accessoryType = .checkmark
checked[indexPath.row] = true
}
}
}
答案 0 :(得分:1)
保留选择的额外数组是不好的做法,并且很难维护,例如是否可以插入,删除或移动单元格。
强烈建议将信息存储在数据模型中
在您的结构中添加成员isSelected
struct Jsonstruct20 : Decodable {
let name, emp_id : String
var isSelected = false
private enum CodingKeys : String, CodingKey { case name, emp_id }
}
var checked = [Bool]()
在cellForRow
中,根据isSelected
设置选中标记(我删除了冗余代码)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard tableView == self.switchTableView else { return UITableViewCell() }
let cell = tableView.dequeueReusableCell(withIdentifier: "cell1") as! switchTableViewCell
let item = arrdata20[indexPath.row]
cell.nameLbl.text = item.name
print(cell.nameLbl.text)
cell.accessoryType = item.isSelected ? .checkmark : .none
cell.isHidden = item.emp_id == DataManager.sharedInstance.empID
return cell
}
在didSelectRowAt
中,只需切换isSelected
并重新加载行即可更新单元格
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard tableView == self.switchTableView else { return }
tableView.deselectRow(at: indexPath, animated: true)
arrdata20[indexPath.row].isSelected = !arrdata20[indexPath.row].isSelected
// or in Swift 4.2+ arrdata20[indexPath.row].isSelected.toggle()
tableView.reloadRows(at: [indexPath], with: .none)
}
要获取所选单元格的所有名称,请过滤数据源数组
let selectedNames = Array(arrdata20.lazy.filter{$0.isSelected}.map{$0.name})