自定义单元格 - UITableVIew 内的 UICollectionView

Posted

技术标签:

【中文标题】自定义单元格 - UITableVIew 内的 UICollectionView【英文标题】:Custom cells - UICollectionView inside UITableVIew 【发布时间】:2015-03-26 10:11:30 【问题描述】:

嗨,

我在 UITableView 中嵌入了一个 UICollectionView。看起来像这个教程:http://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell/

除了!我想在每个 UICollectionViewCell 中都有标签来显示它们的 indexPath.row。

问题: 我不知道如何使用 UICollectionViewCell 连接到我的 XIB - 因为我的名为 MainTableCollectionViewCell 的类是 UITableViewCell 类(不是 UICollectionViewCell 类)。我需要能够使用@IBoutlet 操作单元格的标签,但它现在无法连接,因为我无法将我的班级连接到 XIB

这是我的项目检查员:

MainTableCollectionViewCell.xib - 这是我的集合视图单元格

MainTableCollectionView.xib - 只是一个空的单个视图

MainTableCollectionViewCellControler.swift

MainTableCollectionViewControler.swift

这是我的代码:

Cell的代码片段:

class MainTableCollectionViewCell: UITableViewCell
var collectionView: UICollectionView!

override init(style: UITableViewCellStyle, reuseIdentifier: String?) 
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    var layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.scrollDirection = UICollectionViewScrollDirection.Horizontal
    self.collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: layout)
    self.collectionView.registerNib(UINib(nibName: "MainTableCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: collectionViewCellIdentifier)
    self.collectionView.showsHorizontalScrollIndicator = false
    self.contentView.addSubview(self.collectionView)

// -----------somestuff like delegates passing and overriding layoutsubviews below - I didnt include it here, I can paste it if necessary-------------

控制器的代码片段(参见我在 dequeueReusableCellWithReuseIdentifier 中的 cmets):

class MainTableCollectionViewController: UITableViewController,UICollectionViewDataSource,UICollectionViewDelegate 

  // @IBOutlet var labelText: UILabel!

override init()
    super.init(style: UITableViewStyle.Plain)
    self.tableView.registerClass(MainTableCollectionViewCell.self, forCellReuseIdentifier: reuseTableViewCellIdentifier)



required init(coder aDecoder: NSCoder) 
    fatalError("init(coder:) has not been implemented")

private override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)



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

    return 15


func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    let cell: UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseCollectionViewCellIdentifier, forIndexPath: indexPath) as UICollectionViewCell

    //I would like to be able to put something like 
    // cell.label.text ="indexPath.row" but I need the outlet 
    // active

return cell

【问题讨论】:

【参考方案1】:

我认为您无法将 UITableView 中的 UICollectionView 连接到您的代码。但是你为什么不使用cellForItemAtIndexPath函数来显示你的indexPath.row呢?

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    let cell: UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseCollectionViewCellIdentifier, forIndexPath: indexPath) as UICollectionViewCell

    cell.textLabel?.text = String(indexPath.row)

    return cell

然后你在 XIB 中连接你的 UICollectionView 数据源和委托。

【讨论】:

我不能这样做 cell.textLabel?.text = String(indexPath.row) 这不起作用,因为我没有在任何地方定义 textLabel。这是我的问题 - 我不知道如何定义它。尝试将@IBOutlet textLabel 放在我的单元控制器中 - 但我无法将插座链接到 XIB 中的标签。那是因为带有单元的 XIB 没有连接到身份检查器中的 CellController 类。和!我无法在那里连接它,因为我的 XIB 是 CollectionCell 而我的单元格类是 UITableViewCell。【参考方案2】:

我已经在tableview里面实现了collection view 您必须将集合视图放在 UITableviewCell 自定义类中,并在 UITableView 自定义类单元格中注册集合视图的委托和数据源 我已经在以下存储库中实现 https://github.com/EonKid/CollectionViewInsideTableView

【讨论】:

以上是关于自定义单元格 - UITableVIew 内的 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

uitableview 自定义单元格在向下滚动 uitableview 时丢失其内容

数据未显示在 UITableView 的自定义单元格中

在 UITableView 的自定义单元格中使用滑块

在 UIScrollView 内的 UITableView 中按需加载单元格

CustomTableCell 内的 UICollectionView

使用自定义单元格反转 UITableView