我有一个特别UICollectionViewCell
想实例化自己,并添加到UICollectionView
. 为了使其工作,UICollectionViewCell
实例需要.reuseIdentifier
设置其属性。
通常,描述单元格的类或 Nib 会在集合视图中注册,并且集合视图会使用.reuseIdentifier
已设置的单元格实例化单元格,使用以下方法:
- registerClass:forCellWithReuseIdentifier:
- registerNib:forCellWithReuseIdentifier:
但是,由于我在集合视图之外构建此单元格,因此这些不适用。
当我自己创建单元格时,似乎无法设置它.reuseIdentifier
(因为它是只读属性,并且没有init...
初始化它的方法)。
.reuseIdentifier
未设置时UICollectionView
,添加单元格时会引发异常。此行为不同于UITableView
,其中重用标识符是可选的。
设置集合视图单元格的重用标识符的一种简单解决方法是将其嵌入.xib
文件中并使用该Identifier
框,然后使用
[NSBundle.mainBundle loadNibNamed:@"MyCellName" owner:self options:nil][0];
然后我可以通过上述实例化UICollectionViewCell
并且一切正常。
...但这似乎是一个非常愚蠢和任意的箍跳。是否有其他方法可以在没有.xib
-wrapper 绕行的情况下在单元实例上设置此属性?
更新:Apple 的文档是这样说的:
为了简化代码的创建过程,集合视图要求您始终使视图出列,而不是在代码中显式创建它们。
...这实际上是不正确的,因为它不需要这个(即,只要以某种方式设置了它们的标识符,外部实例单元就可以正常工作,例如,如果从 a 加载.xib
),它也不会“简化我的代码的创建过程”在我的特定用例中(需要一个额外的文件;此外,要求集合视图创建这几个复杂的一次性文件会很麻烦)。
但是上面的内容似乎暗示这个问题的答案是否定的:故意“很难”创建一个可用的单元格,除非让集合视图出列它。