在自定义表视图单元格中嵌入集合视图

时间:2013-05-20 10:49:26

标签: xcode cocoa tableviewcell

我有一个带有自定义Cell的表视图,它从数组中获取内容,这一切都很好。我想在此内容中添加一个不同数量的缩略图图像集合视图到每个自定义表视图单元格。

我已将集合添加到故事板中的自定义单元格。 我已经将Collection链接到Custom Cell.m(不确定它应该去那里)。 我创建了一个Collection Custom Cell并将图像链接到了。

从这里我不确定,是否应该将构建集合视图的方法放在自定义表单元格中。或者在View Controller.m中?我有一个故事板的图像,你可以看到自定义表格单元格,然后(不太清楚)底部是一个集合视图(水平滚动),我想填充图像 - 只是不知道如何?我也不确定哪些信息可能会有所帮助,所以如果有信息遗失,我很抱歉。

Picture of Custom Table Cell

2 个答案:

答案 0 :(得分:4)

您应该将Delagate的{​​{1}}和DataSource放入自定义UICollectionView课程中。

这是nice tutorial

它是关于tableview单元格中的tableview,但这个想法非常相似。

祝你好运!

答案 1 :(得分:2)

这是swift的解决方案。 您需要使用tableView委托方法cellForRowAtIndexPath设置collectionview数据源并委托到tableview单元格中,之后将collectionview数据源和委托方法用于已确认tableveiew数据源和委托的viewController中。这是mainViewController的代码:

extension MainViewController:UITableViewDataSource, UITableViewDelegate {

// .....do some table view setup like numberOfRowsInSection ......

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("yourReusecellIdentifier", forIndexPath: indexPath) as! yourCustomCell

cell.setCollectionViewDataSourceDelegate(self, forRow: indexPath.row)

 return cell
}
}

此处,将collectionview出口拖到tableview单元格后,cell.setcollectionViewDataSourceDelegate(self,forRow:indexPath.rom)代码将collectionview委托和数据源设置到表格视图单元格中。进入tableView单元格添加一个mehod setcollectionViewDataSourceDelegate来设置collectionView委托如下:

class yourCustomCell: UITableViewCell {

//MARK:- Properties

@IBOutlet weak var collectionView: UICollectionView!    

//MARK:- initialization methods

override func awakeFromNib() {
    super.awakeFromNib()
    setupView()
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

}

//MARK:- Setup collectionView datasource and delegate

func setCollectionViewDataSourceDelegate
    <D: protocol<UICollectionViewDataSource, UICollectionViewDelegate>>
    (dataSourceDelegate: D, forRow row: Int) {

    collectionView.delegate = dataSourceDelegate
    collectionView.dataSource = dataSourceDelegate
    collectionView.tag = row
    collectionView.reloadData()
}
}

在此之后使用集合视图委托方法到您的视图控制器:

extension MainViewController: UICollectionViewDelegate, UICollectionViewDataSource {

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {

       return  2

}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return 5
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("collectionViewReuseIdentifier", forIndexPath: indexPath) as! YourCollectionViewCustomCell

         .......cell configure....

        return cell

}
}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

 print("get selected collectionview itemindex \(indexPath.row)")

}
}

有关明确说明,请访问此https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/