当我在 swift 中单击表视图外的按钮时,如何 select 所有行并在表视图中获取其 ID
How to select all rows and get its id in tableview when i click button outside of tableview in swift
我有带自定义复选框的表格视图。在这里,如果我单击位于 tableview 之外的 select all
按钮,那么我需要显示所有 tableview 行 selected with checkmark
code: tableview 单元格包含行 selection 的 chkImg 和 chkBtn。使用此代码我可以 select 和 deselect 多行但是 如果我单击 selectAllBtn
我需要所有行 select 与 cell.chkImg.image = UIImage(systemName: "checkmark")
和arrSelectedRows
中的所有行 ID
如何操作请指导我
var arrSelectedRows:[Int] = []
@IBAction func selectAllBtn(_ sender: UIButton) {
tableView.reloadData()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: ServiceListTableViewCell.cellIdentifier, for: indexPath) as! ServiceListTableViewCell
let id = self.serviceList?.result?.services?[indexPath.row].id ?? 0
if arrSelectedRows.contains(id){
cell.chkImg.image = UIImage(systemName: "checkmark")
}else{
cell.chkImg.image = UIImage(named: "checkbox_inactive")
}
cell.chkBtn.tag = id
cell.chkBtn.addTarget(self, action: #selector(checkBoxSelection(_:)), for: .touchUpInside)
return cell
}
@objc func checkBoxSelection(_ sender:UIButton)
{
print(sender.tag)
if self.arrSelectedRows.contains(sender.tag){
self.arrSelectedRows.remove(at: self.arrSelectedRows.index(of: sender.tag)!)
print("arrayof selected row ids \(arrSelectedRows)")
}else{
self.arrSelectedRows.append(sender.tag)
}
self.tableView.reloadData()
}
点击按钮,执行这行代码。
for i in 0..<self.serviceList?.result?.services.count{
arrSelectedRows.append(self.serviceList?.result?.services?[i].id)
}
self.tableView.reloadData()
你可以使用Swift map函数,通过它你可以得到你selectedArray
中的所有id
@IBAction func selectAllBtn(_ sender: UIButton) {
let servicesCount = self.serviceList?.result?.services?.count ?? 0
if servicesCount == self.arrSelectedRows {
self.arrSelectedRows.removeAll()
} else {
self.arrSelectedRows = self.serviceList?.result?.services?.map({[=10=].id ?? 0})
}
tableView.reloadData()
}
@Azruddin Shaikh 对这个问题的回答是正确的。我将添加通过按同一个按钮取消选择所有项目的逻辑。
首先,您必须创建一个 IBOutlet
按钮
@IBOutlet weak var selectAllButton: UIButton!
然后在IBAction
方法中,根据按钮的当前标题更改按钮的标题。
@IBAction func selectAllBtn(_ sender: UIButton) {
let titleText = sender.titleLabel?.text ?? ""
if titleText == "Select All" {
self.arrSelectedRows = self.serviceList?.result?.services?.map({[=11=].id ?? 0})
self.selectAllButton.setTitle("Deselect All", for: .normal)
} else if titleText == "Deselect All" {
self.arrSelectedRows.removeAll()
self.selectAllButton.setTitle("Select All", for: .normal)
}
tableView.reloadData()
}
我有带自定义复选框的表格视图。在这里,如果我单击位于 tableview 之外的 select all
按钮,那么我需要显示所有 tableview 行 selected with checkmark
code: tableview 单元格包含行 selection 的 chkImg 和 chkBtn。使用此代码我可以 select 和 deselect 多行但是 如果我单击 selectAllBtn
我需要所有行 select 与 cell.chkImg.image = UIImage(systemName: "checkmark")
和arrSelectedRows
如何操作请指导我
var arrSelectedRows:[Int] = []
@IBAction func selectAllBtn(_ sender: UIButton) {
tableView.reloadData()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: ServiceListTableViewCell.cellIdentifier, for: indexPath) as! ServiceListTableViewCell
let id = self.serviceList?.result?.services?[indexPath.row].id ?? 0
if arrSelectedRows.contains(id){
cell.chkImg.image = UIImage(systemName: "checkmark")
}else{
cell.chkImg.image = UIImage(named: "checkbox_inactive")
}
cell.chkBtn.tag = id
cell.chkBtn.addTarget(self, action: #selector(checkBoxSelection(_:)), for: .touchUpInside)
return cell
}
@objc func checkBoxSelection(_ sender:UIButton)
{
print(sender.tag)
if self.arrSelectedRows.contains(sender.tag){
self.arrSelectedRows.remove(at: self.arrSelectedRows.index(of: sender.tag)!)
print("arrayof selected row ids \(arrSelectedRows)")
}else{
self.arrSelectedRows.append(sender.tag)
}
self.tableView.reloadData()
}
点击按钮,执行这行代码。
for i in 0..<self.serviceList?.result?.services.count{
arrSelectedRows.append(self.serviceList?.result?.services?[i].id)
}
self.tableView.reloadData()
你可以使用Swift map函数,通过它你可以得到你selectedArray
中的所有id@IBAction func selectAllBtn(_ sender: UIButton) {
let servicesCount = self.serviceList?.result?.services?.count ?? 0
if servicesCount == self.arrSelectedRows {
self.arrSelectedRows.removeAll()
} else {
self.arrSelectedRows = self.serviceList?.result?.services?.map({[=10=].id ?? 0})
}
tableView.reloadData()
}
@Azruddin Shaikh 对这个问题的回答是正确的。我将添加通过按同一个按钮取消选择所有项目的逻辑。
首先,您必须创建一个 IBOutlet
按钮
@IBOutlet weak var selectAllButton: UIButton!
然后在IBAction
方法中,根据按钮的当前标题更改按钮的标题。
@IBAction func selectAllBtn(_ sender: UIButton) {
let titleText = sender.titleLabel?.text ?? ""
if titleText == "Select All" {
self.arrSelectedRows = self.serviceList?.result?.services?.map({[=11=].id ?? 0})
self.selectAllButton.setTitle("Deselect All", for: .normal)
} else if titleText == "Deselect All" {
self.arrSelectedRows.removeAll()
self.selectAllButton.setTitle("Select All", for: .normal)
}
tableView.reloadData()
}