另一个 CollectionViewCell 中的 CollectionView
Posted
技术标签:
【中文标题】另一个 CollectionViewCell 中的 CollectionView【英文标题】:CollectionView inside another CollectionViewCell 【发布时间】:2016-10-05 07:52:58 【问题描述】:我正在尝试在另一个 collectionViewCell
中创建 collectionView
。我可以得到外部collectionView
的单元格,但是编译器没有执行内部单元格。如何获得两个单元格?
P.S 我是新手。
CollectionViewController 类:
class CollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout
@IBOutlet var collectionView1: UICollectionView!
var coll2 = CollectionViewCell()
override func viewDidLoad()
super.viewDidLoad()
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return 3
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
return CGSize(width: view.frame.width, height: 150)
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)as! CollectionViewCell
cell.backgroundColor = UIColor.black
return cell
CollectionViewCell 类:
class CollectionViewCell: UICollectionViewCell
@IBOutlet var collectionView2: UICollectionView!
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return 1
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
return CGSize(width: collectionView2.frame.width, height: 150)
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell1 = collectionView.dequeueReusableCell(withReuseIdentifier: "cell2", for: indexPath)as! CollectionViewCell2
cell1.backgroundColor = UIColor.red
return cell1
enter image description here
【问题讨论】:
【参考方案1】:将内部集合视图的委托和数据源设置为第一个集合视图单元格。
override func awakeFromNib()
super.awakeFromNib()
// Initialization code
self.collectionView2?.delegate = self
self.collectionView2?.dataSource = self
【讨论】:
我尝试将它放入 CollectionViewCell(外部单元格)中,但出现错误:在展开可选值时意外发现 nil 试试 self.collectionView2?.delegate = self self.collectionView2?.dataSource = self【参考方案2】:CollectionViewCell
之所以没有设置collectionView2
是因为你没有将collectionView2
的delegate
和dataSource
属性设置为CollectionViewCell
的实例。
我在CollectionViewCell
中创建了一个名为setupViews
的方法,以便在您将CollectionViewController
中的CollectionViewCell
出列时调用它,以便正确设置委托和数据源。
class CollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return 3
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
return CGSize(width: view.frame.width, height: 150)
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)as! CollectionViewCell
cell.backgroundColor = UIColor.black
cell.setupViews() // added this call
return cell
class CollectionViewCell: UICollectionViewCell, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout
@IBOutlet weak var collectionView2: UICollectionView!
// added this method
func setupViews()
collectionView2.delegate = self
collectionView2.dataSource = self
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return 1
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
return CGSize(width: collectionView2.frame.width, height: 150)
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell1 = collectionView.dequeueReusableCell(withReuseIdentifier: "cell2", for: indexPath)
cell1.backgroundColor = UIColor.red
return cell1
【讨论】:
以上是关于另一个 CollectionViewCell 中的 CollectionView的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 collectionViewCell 显示异常行为?
单击 CollectionViewCell 内的 ImageView 以转到 ViewController
CollectionView 里面的 CollectionView | CollectionViewCell 自动布局错误
CollectionViewCell 顶部的按钮使 collectionView 停止滚动