Skip to main content
 首页 » 编程设计

xcode之使用 Interface Builder 在 nib 中设计 UICollectionView 单元格(没有 Storyboard )

2024年10月25日14fff_TT

我正在尝试设计一个自定义 UICollectionViewCell原型(prototype)(在 Xcode 5.0.2 中),但是 Interface Builder 不允许我将单元格添加到我的 UICollectionView在设计 Nib 时。如果我使用 Storyboard ,我可以设置项目(单元格)的数量,并且 Interface Builder 可以完美地创建和显示单元格,但我无法在 Nib 的 Collection View 中添加单元格。我试过了:

  • 从对象库中手动将 Collection View 单元拖放到 Collection View 中。 (失败:不允许我将单元格放在我视野中的任何地方)
  • 使用 Storyboard 中的单元格创建我的收藏 View ,并将整个 View 复制粘贴到 nib 中。 (失败: Collection View 被复制但单元格消失了)
  • 使用 Storyboard中的单元格创建我的 Collection View ,将 Storyboard作为源代码打开,找到我的 Collection View 单元格,复制相关的 XML,将我的 nib 作为源代码打开,将其粘贴到我的 XML Collection View 中。 (失败:无法在 Interface Builder 中打开 nib,它会出错。当我从源代码中删除单元格时,它会再次打开。如果您不知道自己在做什么,请不要尝试。)

  • 我还看到了几个关于同一问题的问题:
  • Is it possible to create prototype cells in Interface Builder without story boards?
  • Custom Header in UICollectionView with Interface Builder without Storyboard
  • Prototype Cells in a nib instead of a storyboard

  • 他们都指出要以编程方式和/或为单元格使用另一个 Nib 。我知道怎么做,但是有什么方法可以设计 Collection View 单元格,在 Nib 的同一 View 内的 Collection View 中,就像在 Storyboard 中一样?为什么 Interface Builder 不允许我在它允许(甚至鼓励)完美使用 Storyboard 的 nib 中做到这一点?

    请您参考如下方法:

    简单的答案是否定的,这是不可能的。将 Storyboard视为 XIB 的集合。 XIB 简单地定义了特定 View 的方面,以便可以在运行时构造它。

    关于 Collection View 及其 Storyboard 实现,重要的是要了解 Storyboard 允许嵌套 View Controller 并使用其 XIB 定义 Collection View ,因为这使 Storyboard 的基本范式保持一致。由于 Storyboard是定义应用程序的“故事”或场景的手段,因此它允许声明可重用 View 以在 Collection View 中使用是很自然的。

    XIBs 不能这样说,因为 XIBs 背后的基本思想是可重用性。只要 Controller 向 Collection View 注册这些类,这将允许在 XIB 中定义的 Collection View 使用任何单元格。通过这种方式,您可以获得可重用性的好处,因为另一个 Controller 可以使用相同的 XIB 并注册不同的单元等。

    因此,我认为允许在 XIB 中声明 Collection View 的受支持单元会更加困惑,因为这违反了 XIB 所追求的单一责任原则(如果可以这样称呼的话)。

    您最好的解决方案是定义一个自定义 Collection View 子类,该子类在实例化时注册相关单元格,然后在您的 XIB 中使用此类。