我正在制作一个允许用户选择项目的表格视图,主要的是主要项目,每个主要项目都包含一个次要列表,我创建了一个自定义单元格,并且还在其中插入了另一个表格视图,如下面的图片链接所示。
Form picture
这是我的ViewController。
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)
}
希望能帮助到你...
关于ios - 如何使用一个表 View 的按钮自动选择另一个表 View 的按钮,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61541077/