首页 > 解决方案 > 如何在 swift 中在动态 TableView 中创建动态 tableView?

问题描述

我想在 swift 中的动态 tableView 中创建动态 tableView。

像这样, 看图片

例如,在第一个 tableView 单元格的外部,制作 3 行表格单元格,在第二个 tableView 单元格中,制作 1 行表格单元格,......像这样。

如果有另一种方法来创建这些视图,请告诉我。

标签: swiftdynamictableviewtablecell

解决方案


这可以通过下一种方式完成。使用具有多个部分的 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


推荐阅读