正确隐藏和显示 TableViewCells?
Posted
技术标签:
【中文标题】正确隐藏和显示 TableViewCells?【英文标题】:Hide and Show TableViewCells properly? 【发布时间】:2017-09-11 21:32:12 【问题描述】:我正在为我的应用程序制作一个表格视图控制器,它有不同的标题。 我正在使用一个自定义标题视图,其中有一个按钮。该按钮用于显示该部分的行。我将每个标题的节号保存在按钮的标签属性中。
我查看了 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
【问题讨论】:
【参考方案1】:将您的代码更改为点击按钮的代码
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
【讨论】:
【参考方案2】:您是否尝试从 tableView:numberOfRowsInSection:
返回 0 以获取隐藏部分?点击按钮时,您可以将表格视图告诉reloadSections:withRowAnimation:
。
【讨论】:
非常感谢,它就像一个该死的魅力!!!!然而唯一的问题是它不是从顶部开始的。它进入该部分的底部。有没有办法解决这个问题?以上是关于正确隐藏和显示 TableViewCells?的主要内容,如果未能解决你的问题,请参考以下文章
在情节提要中使用自定义 tableviewcells 时,IBOutlet 为零
获取 TableviewCells 以显示从 firebase 提取的不同数据并在 CollectionView 中显示它们
searchBar 过滤 tableViewCells didSelectItemAt indexPath 显示在 navigationBar Title