我正在为我的应用制作一个表格视图控制器,它有不同的标题。 我正在使用自定义标题视图,其中有一个按钮。该按钮用于显示该部分的行。我在按钮的tag属性中保存了每个标题的节号。
我已经查看过20多个帖子,但是他们都说将高度设置为0并隐藏单元格。这很荒谬,因为汽车布局会产生大量错误并使应用程序滞后很多。
我所做的是制作2个不同的细胞。一个用于显示我的数据,另一个是高度为0的空单元格。
然后在我的代码中,我有一个名为openSection的变量,它保存当前打开的节号。
所以现在当我点击按钮时,当前部分关闭,新的部分打开。然而,有很多很多问题。 例如,如果我向上滚动细胞不断变化。 接下来的问题是,如果我打开最后一个标题,我无法向上滚动到第一个标题,这真的很奇怪。
按下按钮时,这是我的功能
func buttonTapped(_ sender: UIButton) {
DispatchQueue.main.async {
self.openSection = sender.tag
self.tableView.reloadData()
self.tableView.beginUpdates()
self.tableView.endUpdates()
}
print("Button tapped")
}
这是我的cellForRowAt函数
if openSection == indexPath.section {
print("cellForRowAt")
print(openSection)
let cell = tableView.dequeueReusableCell(withIdentifier: "treatmentCell", for: indexPath) as! TreatmentTableViewCell
cell.name.text = self.treatments[indexPath.section].treatments[indexPath.row].name
cell.price.text = self.treatments[indexPath.section].treatments[indexPath.row].price
cell.details.text = self.treatments[indexPath.section].treatments[indexPath.row].details
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "emptyCell", for: indexPath)
cell.isHidden = true
return cell
}
这是我的heightForRowAt函数
if openSection == indexPath.section {
print("heightForRowAt")
print(openSection)
return self.tableView.rowHeight
} else {
return 0
}
答案 0 :(得分:0)
您是否尝试从tableView:numberOfRowsInSection:
为隐藏的部分返回0?点击按钮时,您可以将表格视图告诉reloadSections:withRowAnimation:
。
答案 1 :(得分:0)
将您的代码更改为按钮
self.openSection = sender.tag
let index = IndexPath(row: 0, section: openSection)
DispatchQueue.main.async {
self.tableView.reloadData()
self.tableView.reloadSections(IndexSet(integer: self.openSection), with: .automatic)
self.tableView.scrollToRow(at: index, at: .top, animated: true)
}
然后将部分中的行数更改为下面的代码
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if openSection == section {
return self.treatments[openSection].treatments.count
} else {
return 0
}
}