ios - 如何使用一个tableview的按钮自动选择另一个tableview的按钮全部
问题描述
我正在制作一个允许用户选择项目的 tableview,primary 是主要项目,每个主要项目都包含一个辅助列表,我创建了一个自定义单元格并在里面插入了另一个 tableview,如下图链接所示。
这是我的视图控制器。
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, PrimaryDelegate {
@IBOutlet weak var tableView: UITableView!
//This is my data
var cardList = Card(userName: "Kevin", primaryList: [Card.Primary(primaryName: "Card1", secondaryList: [Card.Primary.Secondary(secondaryName: "Card1-1")]),Card.Primary(primaryName: "Card2", secondaryList: [Card.Primary.Secondary(secondaryName: "Card2-1"),Card.Primary.Secondary(secondaryName: "Card2-2")])])
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.reloadData()
}
@IBAction func enterAction(_ sender: Any) {
//I hope here can print the result
//How should I get the result from primaryList and secondaryList in Custom Cell ?
print(cardList)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return cardList.primaryList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell", for: indexPath) as! CustomTableViewCell
cell.primaryLabel.text = cardList.primaryList[indexPath.row].primaryName
cell.secondaryList = cardList.primaryList[indexPath.row].secondaryList
cell.primaryIndex = indexPath.row
cell.primaryDelegate = self
return cell
}
func primaryIndex(index:Int) {
//I use delegate to get index, but how to tell which secondaryList needs to be selected all?
print("primaryIndex\(index)")
}
}
这是我的自定义单元格,它包括另一个表格视图,这就是我感到复杂的原因。
class CustomTableViewCell: UITableViewCell,UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var primaryBtn: UIButton!
@IBOutlet weak var secondaryBtn: UIButton!
@IBOutlet weak var primaryLabel: UILabel!
@IBOutlet weak var secondaryLabel: UILabel!
@IBOutlet weak var secondaryTableView: UITableView!
@IBOutlet weak var secondaryHeight: NSLayoutConstraint!
var primaryIndex:Int?
var primaryDelegate:PrimaryDelegate?
var secondaryList:[Card.Primary.Secondary]!{
didSet{
secondaryTableView.delegate = self
secondaryTableView.dataSource = self
secondaryTableView.reloadData()
secondaryHeight.constant = secondaryTableView.contentSize.height
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return secondaryList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell", for: indexPath) as! CustomTableViewCell
cell.secondaryLabel.text = secondaryList[indexPath.row].secondaryName
return cell
}
@IBAction func primaryBtnAction(_ sender: UIButton) {
sender.isSelected = !primaryBtn.isSelected
primaryDelegate?.primaryIndex(index: primaryIndex!)
}
@IBAction func secondaryBtnAction(_ sender: UIButton) {
sender.isSelected = !secondaryBtn.isSelected
}
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
我希望它可以...
1.当用户选择主要项目时,它可以自动帮我选择所有次要项目。但是,主项只能选择“一个”,当用户选择下一个主项时,需要取消前一项,包括所有次项。
2.当用户按下enterAction时,它可以打印用户选择的数据。我需要知道如果用户不选择主要的,有多少次要列表的项目被选中。我的意思是结果是 Card1-1 和 Card2-1,他们只选择二级列表中的项目。
当我选择主项时,我应该如何告诉自定义单元格的表格视图全选,以及自定义单元格如何知道选择了哪个主项并需要重新加载数据?
如果需要更多信息,请告诉我,这个选择规则让我很困惑。谢谢
解决方案
你可以在你的primaryBtnAction
:
if sender.isSelected{
for section in 0..<tableView.numberOfSections {
for row in 0..<tableView.numberOfRows(inSection: section) {
tableView.selectRow(at: IndexPath(row: row, section: section), animated: false, scrollPosition: .none)
}
}
} else { //Deselect statement
tableView.deselectRow(at: IndexPath(row: row, section: section), animated: false)
}
希望能帮助到你...
推荐阅读
- flutter - Flutter AnimatedList 最后一项 ListTile 被 CupertinoTabBar 重叠
- php - 如何区分管理员和公共的 Codeigniter v4 MVC?
- node.js - 如何在 mongodb 中使用嵌套组?
- azure-devops - Azure DevOps API 版本定义
- jquery - 选中复选框后,Treeview 展开/折叠停止工作
- javascript - 如何将“type=number”限制为某些小数位
- javascript - 使用 FeathersJS 进行深度嵌套的父子关系
- json - 有没有办法使用 JSON 在 Jira 中添加内部评论?
- asp.net-core - SignalR 集线器在 ASP.NET Core 的 RabbitMQ 订阅处理程序中解析为 null
- javascript - 从 objectstore 获取项目在 HTML 中返回 [object Object]