swift - 如何在 swift 中在动态 TableView 中创建动态 tableView?
问题描述
我想在 swift 中的动态 tableView 中创建动态 tableView。
像这样, 看图片
例如,在第一个 tableView 单元格的外部,制作 3 行表格单元格,在第二个 tableView 单元格中,制作 1 行表格单元格,......像这样。
如果有另一种方法来创建这些视图,请告诉我。
解决方案
这可以通过下一种方式完成。使用具有多个部分的 tableview。您的部分计数将来自您要显示的嵌套数据数组,如下所示:
//MARK: custom tableView cell for header
class CustomHeaderCell: UITableViewCell {
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var descriptionLabel: UILabel!
}
//MARK: custom tableView cell for section
class CustomCell: UITableViewCell {
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var descriptionLabel: UILabel!
}
//MARK: Custom model class
class MyClassModelData {
private var title: String
private var description: String
private var mySubModel: [MySubModel]
init(title: String, description: String, mySubModel: [MySubModel]){
self.title = title
self.description = description
self.mySubModel = mySubModel
}
func getTitle() -> String {
return self.title
}
func getDescription() -> String {
return self.description
}
func getSubModelValues() -> [MySubModel] {
retusn self.mySubModel
}
}
//MARK: Custom submodel class
class MySubModel {
private var title: String
private var description: String
init(title: String, description: String){
self.title = title
self.description = description
}
func getTitle() -> String {
return self.title
}
func getDescription() -> String {
return self.description
}
}
//MARK: Section table view controller
class MyTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
//Or use UITableViewController
var sections = [MyClassModelData]()
var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// The below line is to eliminate the empty cells
self.tableView.tableFooterView = UIView()
//Delegates for tableView
self.tableView.delegate = self
self.tableView.datasource = self
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 100 //Or UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let section = self.sections[section]
// Dequeue with the reuse identifier your custom cell or create new one
let headerCell = self.customTableView.dequeueReusableHeaderFooterView(withIdentifier: "customHeaderCell") as! CustomHeaderCell
headerCell.titleLabel.text = section.getTitle()
headerCell.descriptionLabel.text = section.getDescription()
return headerCell
}
// Give a height to our table view cell
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100 //Or UITableViewAutomaticDimension
}
// We have only one section
func numberOfSections(in tableView: UITableView) -> Int {
return sections.count
}
// Rows in section
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sections[section].getSubModelValues().count
}
// Cell creation
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.customTableView.dequeueReusableHeaderFooterView(withIdentifier: "customCell") as! CustomCell
let sectionData = sections[indexPath.section].getSubModelValues()[indexPath.row]
cell.titleLabel = sectionData.getTitle()
cell.descriptionLabel = sectionData.getDescription()
return cell
}
}
也看看这篇文章: https ://medium.com/swift-programming/swift-enums-and-uitableview-sections-1806b74b8138
推荐阅读
- asp.net-mvc - 每当我尝试打开“打开或关闭 Windows 功能”时,服务器管理器都会打开
- ios - 更新 Xcode 导致加载框架失败
- javascript - 修改来自 FCM / onMessageReceived 的通知在应用程序处于后台时未调用
- c# - 跟踪监听器,如何根据事件类型输出到不同的文件c#
- istio - Istio Basic 路由规则无法正常工作
- matlab - 如何在 Matlab 中使用空网格正方形绘制网格网格(即显示网格线)
- c# - 无法将子表单中心化到最大化父级
- javascript - 在数组中搜索仅返回第一个结果
- java - 如何在 JTextPane 中选择一些文本时启用/禁用 JButton?
- ionic-framework - IOS IONIC 3 中的文件传输发生率