在UICollectionViewCell上设置.reuseIdentifier

mjh*_*mjh 6 xcode objective-c interface-builder nib uicollectionview

我有一个特殊的例子UICollectionViewCell,我想实例自己,并加入一个例子UICollectionView。为了使其正常工作,UICollectionViewCell实例需要.reuseIdentifier设置其属性。

通常,描述该单元格的类或Nib已向收集视图注册,并且收集视图.reuseIdentifier使用以下方法实例化了已设置的单元格:

- registerClass:forCellWithReuseIdentifier:
- registerNib:forCellWithReuseIdentifier:
Run Code Online (Sandbox Code Playgroud)

但是,由于我是在集合视图之外构造此单元格的,因此这些不适用于。

当我自己创建单元格时,似乎没有办法设置它.reuseIdentifier(因为它是只读属性,并且没有init...初始化它的方法)。

如果.reuseIdentifier没有设置,则UICollectionView抛出时添加的细胞异常。此行为不同于UITableView,后者的重用标识符是可选的。

设置集合视图单元格的重用标识符的一种简单的解决方法是将其嵌入.xib文件中并使用该Identifier框,然后使用以下命令创建该单元格的实例

[NSBundle.mainBundle loadNibNamed:@"MyCellName" owner:self options:nil][0];
Run Code Online (Sandbox Code Playgroud)

然后,我可以通过上述指示UICollectionViewCell,一切正常。

...但是这似乎是一个愚蠢而随意的循环。还有其他方法可以在不使用.xib-wrapper绕行的情况下在单元实例上设置此属性吗?


更新:Apple文档说明:

为了简化代码的创建过程,集合视图要求您始终使视图出队,而不是在代码中显式创建视图。

...这实际上是不正确的,因为它不需要这样做(即,只要以某种方式设置了它们的标识符(例如从a加载.xib),外部实例化的单元就可以正常工作,而且它也不会“简化在我的特定用例中创建代码的过程(而不是需要一个额外的文件;更进一步的是,要求集合视图创建这几个复杂的一次性对象是很麻烦的)。

但是以上似乎确实暗示了对这个问题的答案是否定的:故意创建一个可用的单元格是“困难的”,除非通过使收集视图将其出队。

sun*_*ppy 2

使用这两种方法。

\n\n
\xe2\x80\x93 registerNib:forCellWithReuseIdentifier:\n\xe2\x80\x93 dequeueReusableCellWithReuseIdentifier:forIndexPath:\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅苹果的UICollectionView 类参考

\n