在表格单元格内显示完整表格

时间:2016-03-29 19:13:41

标签: swift uitableview

我的目标是建立一个列出食品类别的表格。

在每个类别名称下面是另一个列出各种食物的表格。该子表应完全扩展。我可以显示数据,只是布局让我头疼。

因此,在父表中的每个食品类别标签下,应该有一个完全扩展的食品子表。但是,当我运行它时,子表一直被折叠。仅显示食品类别标签。如果我开始点击和滚动,我可以看到食品,但它没有完全展开。任何帮助表示赞赏!

我的布局最终如下所示 DummyConsumer.scala

我有

class ParentFoodTable: UITableViewController 

并且配置了每个单元格(包含标签和另一个tableview)

class ChildFoodCell: UITableViewCell,UITableViewDataSource,UITableViewDelegate 

再一次,我可以显示数据,只是布局和外观非常糟糕,因为父表的单元格没有扩展或符合子表的高度。

ParentFoodTable

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    return UITableViewAutomaticDimension
}

ChildFoodCell

func setUpTable()
{
    subMenuTable?.delegate = self
    subMenuTable?.dataSource = self
    subMenuTable?.rowHeight = UITableViewAutomaticDimension
    subMenuTable?.estimatedRowHeight = 44.0

}

1 个答案:

答案 0 :(得分:0)

有两个选项,第一个是Koen建议使用主/细节模型,第二个视图控制器显示所选类别中的项目。

第二个选项是使用“分组的表格视图”,其中组对应于您的类别,然后这些项目对应于该类别中的项目。

基本上,这看起来像是:

class Category {
    let name : String
    let items : [Item]

    init(name:String, items:[Item]) {
        self.name = name
        self.items = items
    }
}

class Item {
    let name : String

    init(name:String) {
        self.name = name
    }
}

class MyTableViewController : UITableViewController {
    var data = [Category]()

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return data.count
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data[section].items.count
    }

    override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return data[section].name
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let category = data[indexPath.section]
        let item = category.items[indexPath.row]
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

        cell.textLabel?.text = item.name

        return cell
    }
}