【问题标题】:Designing UICollectionView cells in nib with Interface Builder (without storyboard)使用 Interface Builder 在 nib 中设计 UICollectionView 单元格(没有情节提要)
【发布时间】:2014-03-30 03:39:48
【问题描述】:

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

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

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

他们都指出以编程方式执行它们和/或为单元格使用另一个笔尖。我知道怎么做,但是有什么方法可以设计集合视图单元格,在笔尖的集合视图中在同一视图中,就像在情节提要中一样?为什么 Interface Builder 不允许我在它允许(甚至鼓励)完美使用情节提要的 nib 中做到这一点?

【问题讨论】:

  • 这是一个很好的问题。非常清楚:据我了解:如果您使用情节提要,它确实可以完美工作,但另一方面它不适用于普通的 xib。那是对的吗?这就是我发现的。
  • 没有人回答你的问题真是太神奇了。对我来说,这样的事情太重要了!这是一个.. stackoverflow.com/questions/22786858/… 或者例如。我刚刚试图弄清楚,如何获得 UICollectionViewCell 的大小 - 如您的故事板上所见 - 如果您更喜欢使用该大小而不是在 sizeForItemAtIndexPath 中设置它:(即,它可能对您的设计师来说更容易如果发生这种情况)。我想我会开始 cocoaMysteries.com :)
  • 哦,那个真的很有趣。我会调查的(我目前不在那个项目上,但我会回来的)
  • 我已经回答了这个问题stackoverflow.com/questions/15184968/…
  • 您能否提供一个答案,可能带有一个链接,摘自您问题的相关部分,以便我可以将其标记为已接受的答案?

标签: xcode interface-builder uicollectionview nib uicollectionviewcell


【解决方案1】:

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

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

XIB 不能这样说,因为 XIB 背后的基本理念是可重用性。只要控制器向集合视图注册这些类,这将允许在 XIB 中定义的集合视图使用任何单元格。通过这种方式,您可以获得可重用性的好处,因为另一个控制器可以使用相同的 XIB 并注册不同的单元等。

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

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

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 2016-10-28
    • 2012-09-16
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多