iOS使用多个CollectionView重用相同的单元格

时间:2018-01-25 09:17:05

标签: ios swift xcode

我是iOS编程的新手,但根据我对Android的经验,我知道您可以为可以在多个列表中重复使用的项目创建一个设计,而无需创建副本。

在iOS中,我一直在尝试使用UICollectionView的相同方法。

在我看来,我创建了三个水平UICollectionViews(具有不同的数据集),这些视图又使用自己的单元格(与其他单元格相同)。我不知道如何让其他两个系列使用第一个单元格,所以我不需要反复重建同一个单元格。

4 个答案:

答案 0 :(得分:2)

使用单个故事板无法实现此目的。如果要使用Interface Builder(xml)文件进行布局,则应创建MyCell.xib文件,然后在该文件上拖动UICollectionViewCell并使用该xib。 然后你应该将.xib文件与你的集合视图连接如下: let nib = UINib(nibName: "MyCell", bundle: nil) collectionView?.register(nil, for: "MyCellReuseID") 你现在可以和你的手机一起工作了。

您也可以在不创建.xib文件的情况下创建MyCell:UICollectionViewCell类,以编程方式创建视图,然后调用collectionView?.register(MyCell.self, for: "MyCellReuseID")

答案 1 :(得分:1)

在您的函数collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell中,您可以通知收集查看要使用的单元格

如果你定义了你的单元格,你可能会有类似的东西

 class MyCell: UICollectionViewCell{
    var Label: UILabel!
    var imageView: UIImageView!
}

因此,在您的函数collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath)中,您需要通知您的集合视图使用哪个单元格

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")
}

和瞧!

答案 2 :(得分:0)

  1. 使用XIB
  2. 创建新的文件收集单元格
  3. 在视图控制器的“索引行中的项目”委托方法中,初始化单元格并将其返回。
  4. 现在,您的视图控制器中的任何集合视图都具有相同的单元格

答案 3 :(得分:0)

UICollectionViewCell为基类创建Swift类(CollectionViewCell)。这样做时选择create nib选项。

然后创建一个视图控制器并在故事板中为其添加集合视图,并在Identity Inspector中连接此自定义单元格类。基本上,您的结构需要如下所示

enter image description here