我有一个包含2个部分的表格视图,每个部分下面有一些单元格(可以是动态的),显示了相关数据。
这是我编写的用于显示数据的代码...
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return recentUsers?.count
} else {
return groupNameArray?.count
}
}
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
if section == 0 {
return " CHAT LIST"
} else {
return " GROUPS"
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! RecentMessageCell
cell.tag = indexPath.row
if indexPath.section == 0 {
if let user = recentChatUsers?[indexPath.row] {
cell.idLabel?.text = user.id
}
} else {
if groupNameArray.isEmpty == false {
let grpArr = groupNameArray[indexPath.row]
cell.userNameLabel?.text = grpArr.grpname
}
}
return cell
}
现在我要实现的是,如果我单击第一部分,它应该展开并显示其中包含的单元格,第二单元格也应如此。再次单击每个部分,将隐藏已展开的单元格。
我确实在互联网上搜索解决方案。但是,尽管有可用的资源,但是对于我的问题,我找不到很多帮助...
答案 0 :(得分:1)
添加一个数组以跟踪节的扩展/折叠
let sectionStats = [Bool](repeating: true, count: 2)
添加一个IBAction来跟踪节点击,为相应节更新sectionStats
的值并重新加载节
并如下所示更新您的numberOfRowsInSection
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard sectionStats[section] else {
return 0
}
if section == 0 {
return 1
} else {
return list.count
}
}
可贴页眉:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return headerView(section: section, title: section == 0 ? "CHAT LIST" : "GROUPS")
}
private func headerView(section: Int, title: String) -> UIView {
let button = UIButton(frame: CGRect.zero)
button.tag = section
button.setTitle(title, for: .normal)
button.setTitleColor(UIColor.red, for: .normal)
button.addTarget(self, action: #selector(sectionHeaderTapped), for: .touchUpInside)
return button
}
@objc private func sectionHeaderTapped(sender: UIButton) {
let section = sender.tag
sectionStats[section] = !sectionStats[section]
tableView.beginUpdates()
tableView.reloadSections([section], with: .automatic)
tableView.endUpdates()
}
关于如何使用可折叠部分构建表格视图的好指南: https://medium.com/ios-os-x-development/ios-how-to-build-a-table-view-with-collapsible-sections-96badf3387d0
答案 1 :(得分:0)
这种功能需要更多的代码,我无法在此处编写整个代码,但我可以向您解释将用于实现此功能的概念,并附上一些我最终用来创建功能的好教程这个
HeaderView
UITapGestureRecognizer
,并需要在action
的构造函数的UITapGestureRecognizer
部分提供的函数中写入登录信息
- 您需要在
Protocol
文件中创建一个单独的HeaderView
,并且包含ViewController
的{{1}}将采用该协议并处理扩展还是折叠您的行
TableView
实例,其中将包含一个Struct
,用于指示该部分是展开还是折叠这是在iOS中创建boolean variable
时需要的基本概念。
下面我附了一些教程的链接: