Collection可重用视图,包括Collection View Cells(它是一个子类),在Interface Builder中有一个名为“Identifier”的字段,带有提示“Reuse Identifier”。
但是,您通常通过使用UICollectionView
和–registerNib:forCellWithReuseIdentifier:
方法向–registerNib:forSupplementaryViewOfKind:withReuseIdentifier:
注册它来使用它,您还可以在其中指定重用标识符。
那么在Interface Builder中设置一个是什么意思呢?无论你是否将它放在那里似乎没有任何区别。
答案 0 :(得分:4)
如果隐式加载故事板中的集合视图,则只需执行
UICollectionView *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell" forIndexPath:indexPath];
获取细胞。您无需致电registerNib:
。这仅在您设置重用标识符时有效。
答案 1 :(得分:2)
对于NibCell(Nib中的UICollectionView),您必须使用registerNib:,这是唯一的方法。 如果你给Nib中的Cell一个重用标识符,那么这个标识符必须在寄存器中相同,所以最好留空。
-Cell by Code:registerClass
-Cell in Nib(Xib)registerNib
-Cell in StoryBoard:不要注册
我的另一个答案here
答案 2 :(得分:0)
在viewContoller的viewDidLoad中 使用重用标识符注册类或uicollectionview的Nib
中使用相同的内容- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath
是的,我同意设置Interface Bulider没有任何区别,但是如果在Interface Builder中设置并且在代码中使用的不同,那么它会产生差异。
答案 3 :(得分:0)
我自己遇到了一种情况,那里肯定 在Interface Builder中设置了重用标识符与设置它的 not 之间的行为不同。 (这与@LESANG在答案中提到的一致;在单独的nib文件中创建单元格时,重用标识符应该留空。我想要包含更多详细信息,了解何时/为何案例)
就我而言,我有一个自定义单元格,我希望它可以被多个不同的视图控制器使用。为了共享单元格,我为单元格创建了一个单独的nib文件,配置了视图层次结构并在Interface Builder中分配了重用标识符。然后,每个视图控制器使用register(_:forCellWithReuseIdentifier:)
注册该单元,并传入与IB中设置的相同的重用标识符。
但是,对于我的一个视图控制器,我实际上想要注册不同的单元格(不同的重用标识符),但使用相同的nib *。但只是传入一个不同的重用标识符导致应用程序崩溃,抱怨:
在nib中查看重用标识符(
不匹配<reuse identifier in nib>
)与用于注册nib的标识符(<reuse identifier when registering programmatically>
)
为了解决这个问题,必须没有在nib本身中指定的重用标识符。通过删除nib中的标识符,而是使用register(_:forCellWithReuseIdentifier:)
中指定的标识符,并且单元格正确地出列。
因此,值得注意的是,在nib文件中定义单元格时,将重用标识符编码到nib中似乎没有任何意义 - 任何想要使用该单元格的视图都必须在代码中手动注册它,无论如何,哪一点指定那里指定的重用标识符也可以使用而不是nib中的那个。在这种情况下,似乎nib中的所有标识符都优先于以编程方式注册的标识符,并且如果您尝试使用其他标识符,则会导致崩溃。
*当然,我可以使用相同/相似的视图层次结构和不同的重用标识符创建一个新的nib文件,但是我是否需要更改单元格配置我需要在多个单元格中进行相同的更改文件。