TableView里面特定的UICollectionViewCell以编程方式?

Lab*_*ami 5 uitableview ios uicollectionview swift

我想在UICollectionViewCell中添加一个TableView,所以我想自己从TableView管理那个单元格.所以更清楚的是,如果indexPath.row是2,那么我想调用我的tableView单元格内部的collectionview indexPath.row.

请检查图片,我用红色做了我想做的事.我使用UICollectionViewController和UICollectionViewControllerFlowLayout以编程方式创建了所有内容.

Lab*_*ami 6

对于那些需要它的人,我找到了解决方案:

class CustomizedCell: UICollectionViewCell, UITableViewDataSource, UITableViewDelegate {

    var tableView = UITableView()
    let cellIdentifier: String = "tableCell"

    override func layoutSubviews() {
        super.layoutSubviews()

        tableView.delegate = self
        tableView.dataSource = self

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellIdentifier)
}
func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 4
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.value1, reuseIdentifier: cellIdentifier)

    cell.textLabel?.text = "1 CUP"
    cell.detailTextLabel?.text = "Whole"

    return cell
}
Run Code Online (Sandbox Code Playgroud)

}

然后在CollectionView的viewDidLoad方法我这样做:

collectionView?.register(CustomizedCell.self, forCellWithReuseIdentifier: "cell")
Run Code Online (Sandbox Code Playgroud)

之后我在UICollectionView的cellForRowAt indexPath方法中调用了这样的:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CustomizedCell

    return cell
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是违反MVC模式吗?单元格不应该对数据一无所知,因为它们只是视图 (3认同)

MBN*_*MBN 3

您可以为该索引路径创建自定义 UICollectionView 单元格。并在单元格 xib 中添加一个表格视图。

在自定义单元格类中实现 tableview 的委托方法。

 class CustomCollectionViewCell: UICollectionViewCell, UITableViewDataSource, UITableViewDelegate
  {
    @IBOutlet var tableView: UITableView!

    override func layoutSubviews() 
    {
        super.layoutSubviews()
        tableView.delegate = self
        tableView.dataSource = self
    }
  }
Run Code Online (Sandbox Code Playgroud)