如何在Swift的动态TableView中创建动态TableView?

时间:2018-09-12 06:09:44

标签: swift dynamic tableview tablecell

我想在动态表格视图中快速创建动态表格视图。

像这样, See Image

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

如果还有另一种创建此类视图的方法,请告诉我。

1 个答案:

答案 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