如何解决如何将选定的tableview行存储在数组中?
我知道有比我的方式更好的选择行的方法(也欢迎选择行)。否则我只需要知道如何从 tableview 存储选定的行,当点击完成按钮(栏项目)
注意:在我的 tableview 中,我有多个部分,如果我从一个部分中选择一行,其他部分的行将被取消选择。
编辑 1
更多说明, 假设有 3 个部分,每个部分有 5 行。
step1 : 我在 section1 中选择 row1 和 row2
step2:如果我从第 2 节或第 3 节中选择任何行,则第 1 节的所有行都将被取消选择。
第 3 步:假设用户从第 3 部分中选择第 3 行和第 5 行,然后按下完成按钮
我的代码如下,
extension TradeselectionController {
override func numberOfSections(in tableView: UITableView) -> Int {
if isSearching && searchController.searchBar.text != "" {
return viewmodel.filteredCategories?.count ?? 0
}else{
return viewmodel.categorySkills.count
}
}
override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
if isSearching && searchController.searchBar.text != ""{
return viewmodel.filteredCategories?[section].skill.count ?? 0
}else{
let section = viewmodel.categorySkills[section]
return section.skill.count
}
}
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "TradeselectionTableViewCell")
if ((cell != nil)) {
cell = UITableViewCell(style: .subtitle,reuseIdentifier: "TradeselectionTableViewCell")
}
if isSearching && searchController.searchBar.text != "" {
cell?.textLabel?.textColor = UIColor.lightGray
cell?.textLabel?.font = UIFont.systemFont(ofSize: 10)
cell?.textLabel?.text = "(\(String(describing: viewmodel.categorySkills[indexPath.section].vName)))"
let text =
viewmodel.filteredCategories?[indexPath.section].skill[indexPath.row].vName
//don't change order,change text size
cell?.detailTextLabel?.font = UIFont.systemFont(ofSize: 16)
cell?.detailTextLabel?.text = text
}else{
cell?.textLabel?.text = viewmodel.categorySkills[indexPath.section].skill[indexPath.row].vName
}
if selectedIngredients.contains(indexPath){
cell?.accessoryType = .checkmark
cell?.backgroundColor = UIColor.lightGray
}else{
cell?.accessoryType = .none
cell?.backgroundColor = .none
}
return cell!
}
override func tableView(_ tableView: UITableView,titleForHeaderInSection section: Int) -> String? {
if isSearching && searchController.searchBar.text != ""{
return viewmodel.filteredCategories?[section].vName
}else{
let titleText = viewmodel.categorySkills[section].vName
return titleText
}
}
override func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
lastSelectedindexPath = indexPath.section
if self.selectedIngredients.contains(indexPath){
self.selectedIngredients.remove(indexPath)
totalSkills[indexPath.row] = false
}else{
self.selectedIngredients.insert(indexPath)
totalSkills[indexPath.row] = true
}
self.tableView.reloadData()
}
override func tableView(_ tableView: UITableView,willSelectRowAt indexPath: IndexPath) -> IndexPath? {
print(selectedIngredients)
if lastSelectedindexPath != nil {
if lastSelectedindexPath != indexPath.section {
selectedIngredients.removeAll()
print(selectedIngredients)
}
}
return indexPath
}
// override func tableView(_ tableView: UITableView,heightForRowAt indexPath: IndexPath) -> CGFloat {
// return 30
// }
override func tableView(_ tableView: UITableView,heightForHeaderInSection section: Int) -> CGFloat {
return 50
}
override func tableView(_ tableView: UITableView,viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView(frame: CGRect(x: 0,y: 0,width: tableView.frame.width,height: 50))
// headerView.addRoundCorner(10)
headerView.backgroundColor = .lightGray
let label = UILabel()
label.frame = CGRect.init(x: 10,y: 5,width: headerView.frame.width-10,height: headerView.frame.height-10)
label.text = viewmodel.categorySkills[section].vName
label.font = ThemeFonts.font(with: 16,for: .bold)
label.textColor = ThemeColors.primaryTextColor
headerView.addSubview(label)
return headerView
}
}
我尝试过如下所示,但不起作用....
@objc private func doneAction(_ sender: Any?) {
var selectedSkills = [Skill]()
if let selectedindex = tableView.indexPathsForSelectedRows {
selectedindex.forEach({
//viewmodel.categorySkills[indexPath.section].skill[indexPath.row].vName
//let skill = viewmodel.skills[$0.row]
let skill = filteredobjects[$0.row]
print(skill)
// selectedSkills.append(skill)
})
}
dismiss(animated: true,completion: nil)
}
解决方法
向表示数据模型中单元格的结构添加选定标志。(对于分段表视图,结构的二维数组可以很好地用作数据模型。)
在响应用户选择单元格的代码中维护该标志。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。