使用Interface Builder在没有故事板的情况下在nib中设计UICollectionView单元格

时间:2014-02-26 23:53:33

标签: xcode interface-builder uicollectionview nib uicollectionviewcell

我正在尝试设计一个自定义UICollectionViewCell原型(在Xcode 5.0.2中),但是在设计一个笔尖时,Interface Builder不允许我向我的UICollectionView添加一个单元格。我可以设置项目(单元格)和Interface Builder创建的数量,如果我使用的是故事板,则可以完美地显示单元格,但我无法在笔尖中将单元格添加到我的集合视图中。我试过了:

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

我也看到了几个关于同一问题的问题:

他们都指出以编程方式和/或使用另一个笔尖进行细胞处理。我知道怎么做,但有没有办法设计集合视图单元格,在一个集合视图里面的同一个视图,就像在故事板中一样?为什么Interface Builder不允许我在nib中执行此操作,它允许(甚至鼓励)完美地使用故事板?

1 个答案:

答案 0 :(得分:26)

简单的答案是否定的,这是不可能做到的。将故事板视为XIB的集合。 XIB只是定义特定视图的构面,以便可以在运行时构建它。

关于集合视图及其故事板实现,了解故事板允许嵌套视图控制器并使用其XIB定义集合视图非常重要,因为这样可以保持故事板的基本范例一致。由于故事板是定义故事的一种方式。或者应用程序的场景,它很自然地允许声明可重用的视图以便在集合视图中使用。

对于XIB而言,这是不可能的,因为XIB背后的基本思想是可重用性。只要控制器使用集合视图注册这些类,这将允许在XIB中定义的集合视图具有与其一起使用的任何单元。这样您就可以获得可重用性的好处,因为另一个控制器可以使用相同的XIB并注册不同的单元格等。

所以我认为允许在XIB内声明集合视图的受支持单元格会更加困惑,因为这违反了XIB所追求的单一责任原则(如果它可以被称为)。

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