我想在动态表格视图中快速创建动态表格视图。
像这样, See Image
例如,在第一个tableView单元格的外部,制作3行表格单元格, 在第二个tableView单元格中,使1row表单元格,...像这样。
如果还有另一种创建此类视图的方法,请告诉我。
答案 0 :(得分: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