iOS 使用多个 CollectionView 重用同一个单元格
Posted
技术标签:
【中文标题】iOS 使用多个 CollectionView 重用同一个单元格【英文标题】:iOS Use multiple CollectionView reusing the same cell 【发布时间】:2018-01-25 09:17:05 【问题描述】:我是 ios 编程新手,但根据我使用 android 的经验,我知道您可以为一个项目创建一个设计,该设计可以在多个列表中重复使用,而无需创建副本。
在 iOS 中,我一直在尝试与 UICollectionView 相同的方法。
在我看来,我创建了三个水平 UICollectionViews(具有不同的数据集),它们又使用自己的单元格(与其他单元格相同)。我不知道如何让其他两个集合使用第一个单元格,所以我不需要一遍又一遍地重新创建同一个单元格。
【问题讨论】:
如果您使用情节提要,则需要创建原型单元 3 次,但您可以为每个单元使用相同的自定义类。 您可以将 xib 用于您将重复使用的单元格,并为每个集合视图注册它。 很好!你有我可以效仿的例子吗?链接? @Oreex0 寻找“Custom UICollectionViewCell Xib Swift”,你应该会得到很多问题或教程。其中一些可能在“Old Swift”中,但是使用自动完成功能应该很容易找到该方法的新版本,因为整个逻辑保持不变。如果你懂一点 Objective-C,你也可以找到教程。 【参考方案1】:您无法使用单个情节提要实现此目的。如果要使用 Interface Builder (xml) 文件进行布局,则应创建 MyCell.xib 文件,然后将 UICollectionViewCell 拖到该文件上并使用该 xib。
然后你应该将 .xib 文件与你的集合视图连接起来,如下所示:
let nib = UINib(nibName: "MyCell", bundle: nil)
collectionView?.register(nil, for: "MyCellReuseID")
现在您可以使用您的手机了。
您也可以创建 MyCell: UICollectionViewCell 类而不创建 .xib 文件,以编程方式在其上创建视图,然后调用 collectionView?.register(MyCell.self, for: "MyCellReuseID")
【讨论】:
【参考方案2】:在您的函数collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
中,您可以通知您的collectionview 使用哪个单元格
如果你定义了你的单元格,你可能会有类似的东西
class MyCell: UICollectionViewCell
var Label: UILabel!
var imageView: UIImageView!
所以进入你的函数collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)
你需要通知你的collectionview使用哪个单元格
collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
let cell:MyCell = collectionView.dequeueReusableCellWithReuseIdentifier("myCell", forIndexPath: indexPath) as! MyCell
[...]
别忘了先注册你的手机
override func viewDidLoad()
super.viewDidLoad()
//do your stuff
collectionView.delegate = self
collectionView.dataSource = self
collectionView.backgroundColor = UIColor.whiteColor()
collectionView.registerClass(MyCell.self, forCellWithReuseIdentifier: "myCell")
瞧!
【讨论】:
感谢您的快速回复,我一直在玩这个,现在我在展开时得到了零。来自 cell.label xib 文件有我的类和“cell”作为标识符。在情节提要的 CollectionView 中,我将单元格设置为相同的标识符和类。 解决了,注册了 registerNib(UINib.init(nibname: "MyCell", bundle: nil), forcell..:"myCell_identifier")【参考方案3】:-
使用 XIB 创建新的文件收集单元
在视图控制器中的“索引行中的项目”委托方法中,初始化单元格并返回它。
现在视图控制器中的任何集合视图都具有相同的单元格
【讨论】:
到此链接查看完整教程samwize.com/2016/04/06/…【参考方案4】:通过将UICollectionViewCell
作为基类来创建一个 Swift 类(CollectionViewCell)。执行此操作时选择创建 nib 选项。
然后创建一个视图控制器并将集合视图添加到您的故事板中,并将这个自定义单元类连接到Identity Inspector
。基本上,您的结构需要如下所示
【讨论】:
以上是关于iOS 使用多个 CollectionView 重用同一个单元格的主要内容,如果未能解决你的问题,请参考以下文章
具有多个 collectionView 控制器的 iOS 屏幕错误地调用 cellForItemAtIndexPath
如何在 swift ios 的自定义 collectionView 单元中将字符串值显示到多个标签?
collectionview admob ios中的横幅广告