自定义单元格 - 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 时丢失其内容
在 UIScrollView 内的 UITableView 中按需加载单元格