【问题标题】:iOS Use multiple CollectionView reusing the same celliOS 使用多个 CollectionView 重用同一个单元格
【发布时间】:2018-01-25 09:17:05
【问题描述】:

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

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

在我看来,我创建了三个水平 UICollectionViews(具有不同的数据集),它们又使用自己的单元格(与其他单元格相同)。我不知道如何让其他两个集合使用第一个单元格,所以我不需要一遍又一遍地重新创建同一个单元格。

【问题讨论】:

  • 如果您使用情节提要,则需要创建原型单元 3 次,但您可以为每个单元使用相同的自定义类。
  • 您可以将 xib 用于您将重复使用的单元格,并为每个集合视图注册它。
  • 很好!你有我可以效仿的例子吗?链接?
  • @Oreex0 寻找“Custom UICollectionViewCell Xib Swift”,你应该会得到很多问题或教程。其中一些可能在“Old Swift”中,但是使用自动完成功能应该很容易找到该方法的新版本,因为整个逻辑保持不变。如果你懂一点 Objective-C,你也可以找到教程。

标签: ios swift xcode


【解决方案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】:
    1. 使用 XIB 创建新的文件收集单元
    2. 在视图控制器中的“索引行中的项目”委托方法中,初始化单元格并返回它。
    3. 现在视图控制器中的任何集合视图都具有相同的单元格

    【讨论】:

    【解决方案4】:

    通过将UICollectionViewCell 作为基类来创建一个 Swift 类(CollectionViewCell)。执行此操作时选择创建 nib 选项。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多