多个tableView单元格中的多个collectionView

Posted

技术标签:

【中文标题】多个tableView单元格中的多个collectionView【英文标题】:multiple collectionView in multiple tableView cells 【发布时间】:2016-11-16 12:35:09 【问题描述】:

我有一个tableView,其中有两个自定义单元格,在两个单元格中我有不同的CollectionViewCollectionViews 的数据源和委托都是我的ViewController

那么现在我如何检查CollectionViews要在UICollectionView's各自的方法中配置?

这是视图层次结构

我如何知道上面函数的参数中的collectionView是哪个?

这是我的代码:

class FeatureBannerTableViewCell: UITableViewCell 
    @IBOutlet weak var featureCollectionView: UICollectionView!


class FeaturedTableViewCell: UITableViewCell 
    @IBOutlet weak var FeatureTitle: UILabel!
    @IBOutlet weak var seeAllButton: UIButton!
    @IBOutlet weak var collectionView: UICollectionView!


extension ViewController: UITableViewDataSource 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
        switch indexPath.row 
        case 2,3,6,7:
            let cell = featuredTableView.dequeueReusableCellWithIdentifier("FeatureBannerTableViewCell", forIndexPath: indexPath) as! FeatureBannerTableViewCell
            cell.featureCollectionView.dataSource = self
            cell.featureCollectionView.delegate = self
            return cell
        default:
            let cell = featuredTableView.dequeueReusableCellWithIdentifier("FeaturedTableViewCell", forIndexPath: indexPath) as! FeaturedTableViewCell
            cell.collectionView.dataSource = self
            cell.collectionView.delegate = self
            return cell
        
    


extension ViewController: UICollectionViewDataSource 
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        // how do I know if this collectionView is collectionView or featureCollectionView?

    

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    // how do I know if this collectionView is collectionView or featureCollectionView?

    

【问题讨论】:

请把代码的sn-p代替项目。 【参考方案1】:

我会使用 UIView 中的 tag 属性来识别您的集合视图。因此,当您在 cellForRowAtIndexPath 中配置表格单元格时,获取单元格的集合视图并将其标记设置为唯一的(我将使用 indexpath 的行值)。

extension ViewController: UITableViewDataSource 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
        switch indexPath.row 
        case 2,3,6,7:
            let cell = featuredTableView.dequeueReusableCellWithIdentifier("FeatureBannerTableViewCell", forIndexPath: indexPath) as! FeatureBannerTableViewCell
            cell.featureCollectionView.dataSource = self
            cell.featureCollectionView.delegate = self

            cell.featureCollectionView.tag = indexPath.row

            return cell
        default:
            let cell = featuredTableView.dequeueReusableCellWithIdentifier("FeaturedTableViewCell", forIndexPath: indexPath) as! FeaturedTableViewCell
            cell.collectionView.dataSource = self
            cell.collectionView.delegate = self

            cell.collectionView.tag = indexPath.row

            return cell
        
    

然后在您的集合视图方法中获取标记值,这将告诉您它是众多集合视图中的哪一个。

extension ViewController: UICollectionViewDataSource 
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        // how do I know if this collectionView is collectionView or featureCollectionView?
        let datasourceIndex = collectionView.tag
        // now use your datasource for the following index

    


【讨论】:

感谢您的宝贵时间。如果您有空,请通过代码告诉我。 嗨@AlanPerez你能看看我的这个问题***.com/questions/40582962/…【参考方案2】:

我想,你可以使用isKindOfClass

例子:

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

 // get a reference to our storyboard cell
 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyReuseIdentifier", for: indexPath as IndexPath) as! UICollectionViewCell

    if cell.isKindOfClass(FeaturedBannerCollectionCell)
         //implementation code
     else cell.isKindOfClass(FeaturedCollectionViewCell) 
        //implementation code
    

   return cell

【讨论】:

请查看我的代码并查看层次结构图像。

以上是关于多个tableView单元格中的多个collectionView的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift ios中的自定义TableView单元格中显示多个字符串值到多个标签?

iPhone 4.3 的 Tableview 中的多个单元格选择

iOS:如何从 tableview 的自定义单元格中的 UITextField 访问值

表格单元格视图中的多个标签

如何从具有多个数组的字典中获取特定键并存储到放置在表格视图单元格中的字符串中

UITableView 每个单元格中有多个项目