1

When I made NSCollectionView UI...

First time, I registered my collection view item class using

self.cv.register(NSNib.init(nibNamed: "ContentItemOneClass", bundle: nil), forItemWithIdentifier: "ContentItemOneClass")

and I added more collection views and forget to call like

self.cv.register(NSNib.init(nibNamed: "ContentItemTwoClass", bundle: nil), forItemWithIdentifier: "ContentItemTwoClass")

but collectionView(_:itemForRepresentedObjectAt:) , makeItem(withIdentifier:"ContentItemTwoClass", for: indexPath) seems to work just fine.

Now I wonder if registering classes is necessary or can be removed.

thanks.

4

1 回答 1

2

Apple 有一个名为的示例应用程序CocoaSlideCollection,它演示了现代(即 10.11+)的使用NSCollectionView。在collectionView:itemForRepresentedObjectAtIndexPath:文件中的方法中AAPLBrowserWindowController.m,有这样的注释:

返回给 collectionView 的消息,要求它创建一个与给定项目 indexPath 关联的 @"Slide" 项目。collectionView 将首先检查 NSNib 或项目类是否已使用该名称注册(通过 -registerNib:forItemWithIdentifier: 或 -registerClass:forItemWithIdentifier:)。否则,collectionView 将搜索名为“Slide”的 .nib 文件。由于我们的 .nib 文件名为“Slide.nib”,因此无需注册。

虽然我没有在文档中看到明确提到这一点,但这表明只要.xib名称与标识符匹配(并且文件中只有一个NSCollectionViewItem或子类),则不需要注册。

于 2019-04-04T23:10:00.763 回答