无法删除 Swift 中的表视图选定行数组值
Unable to remove tableview's deselected row array value in Swift
我正在使用 tableview 使用按钮选择带有复选标记的多行。使用此代码能够在 arrSelectedRows
中添加所有选定的行 ID 并能够在取消选择时删除....但在这里我在 arrSubCat
中添加所有选定的行 JSON 标题并且无法移除
代码: 在此代码中 arrSubCat
是字符串数组..在此数组中我添加了选定的行 JSON 标题.. 这里的问题是,如果我取消选择该行,则无法从 arrSubCat
数组
中删除取消选择的行标题
如果我这样尝试arrSubCat.remove(at: (sender.tag))
然后报错:
Fatal error: Index out of range
如何解决这个问题..请指导
var arrSelectedRows:[Int] = []
var arrSubCat:[String] = []
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return getSubCategory?.result?.sub_categories?.count ?? 0
}
var removeIndex: Int?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "EditLangTableVIewCell", for: indexPath) as! EditLangTableVIewCell
let id = getSubCategory?.result?.sub_categories?[indexPath.row].id ?? 0
if arrSelectedRows.contains(id){
cell.langSelectButn.setImage(UIImage(systemName: "checkmark"), for: .normal)
}else{
cell.langSelectButn.setImage(UIImage(named: "checkbox_inactive"), for: .normal)
}
cell.langSelectButn.tag = id
cell.langSelectButn.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.firstIndex(of: sender.tag)!)
arrSubCat.remove(at: (sender.tag))
}else{
self.arrSelectedRows.append(sender.tag)
print("arrayof selected row ids \(arrSelectedRows)")
if let selectedSubcat = getSubCategory?.result?.sub_categories{
for singleSubcat in selectedSubcat{
if sender.tag == singleSubcat.id{
arrSubCat.append(singleSubcat.title ?? "")
}
}
}
print("array of subcat title \(arrSubCat)")
}
self.tableView.reloadData()
}
修改checkBoxSelection()
方法的代码如下
if self.arrSelectedRows.contains(sender.tag){
if let selectedIndex = self.arrSelectedRows.firstIndex(of: sender.tag) {
self.arrSelectedRows.remove(at: selectedIndex)
arrSubCat.remove(at: selectedIndex)
}
}
我正在使用 tableview 使用按钮选择带有复选标记的多行。使用此代码能够在 arrSelectedRows
中添加所有选定的行 ID 并能够在取消选择时删除....但在这里我在 arrSubCat
中添加所有选定的行 JSON 标题并且无法移除
代码: 在此代码中 arrSubCat
是字符串数组..在此数组中我添加了选定的行 JSON 标题.. 这里的问题是,如果我取消选择该行,则无法从 arrSubCat
数组
如果我这样尝试arrSubCat.remove(at: (sender.tag))
然后报错:
Fatal error: Index out of range
如何解决这个问题..请指导
var arrSelectedRows:[Int] = []
var arrSubCat:[String] = []
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return getSubCategory?.result?.sub_categories?.count ?? 0
}
var removeIndex: Int?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "EditLangTableVIewCell", for: indexPath) as! EditLangTableVIewCell
let id = getSubCategory?.result?.sub_categories?[indexPath.row].id ?? 0
if arrSelectedRows.contains(id){
cell.langSelectButn.setImage(UIImage(systemName: "checkmark"), for: .normal)
}else{
cell.langSelectButn.setImage(UIImage(named: "checkbox_inactive"), for: .normal)
}
cell.langSelectButn.tag = id
cell.langSelectButn.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.firstIndex(of: sender.tag)!)
arrSubCat.remove(at: (sender.tag))
}else{
self.arrSelectedRows.append(sender.tag)
print("arrayof selected row ids \(arrSelectedRows)")
if let selectedSubcat = getSubCategory?.result?.sub_categories{
for singleSubcat in selectedSubcat{
if sender.tag == singleSubcat.id{
arrSubCat.append(singleSubcat.title ?? "")
}
}
}
print("array of subcat title \(arrSubCat)")
}
self.tableView.reloadData()
}
修改checkBoxSelection()
方法的代码如下
if self.arrSelectedRows.contains(sender.tag){
if let selectedIndex = self.arrSelectedRows.firstIndex(of: sender.tag) {
self.arrSelectedRows.remove(at: selectedIndex)
arrSubCat.remove(at: selectedIndex)
}
}