当我制作NSCollectionView UI时......
第一次,我使用了注册我的集合视图项类
self.cv.register(NSNib.init(nibNamed: "ContentItemOneClass", bundle: nil), forItemWithIdentifier: "ContentItemOneClass")
我添加了更多的集合视图,忘了打电话
self.cv.register(NSNib.init(nibNamed: "ContentItemTwoClass", bundle: nil), forItemWithIdentifier: "ContentItemTwoClass")
但collectionView(_:itemForRepresentedObjectAt:)
,makeItem(withIdentifier:"ContentItemTwoClass", for: indexPath)
似乎工作得很好。
现在我想知道注册类是否必要或可以删除。
谢谢。
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
或子类),就不需要注册。