Swift NSCollectionViewItem从不实例化

Swift NSCollectionViewItem从不实例化,swift,macos,nscollectionview,nscollectionviewitem,Swift,Macos,Nscollectionview,Nscollectionviewitem,我有点迷路了: 我创建了一个类似于颜色选择器的按钮:单击它会在弹出框中显示collectionView。 我首先使用一个包含视图+collectionView(嵌入为scrollView+clipView)的nib文件来实现它。 这东西很好用 由于nib文件非常简单(并且为了提高以编程方式设计视图的编码技能),我决定放弃nib文件,并在代码中编写缺少的部分。 问题是,除了collectionView的内容之外,我设法完成了工作。经过深入调查,似乎在方法内部: func collectionVie

我有点迷路了: 我创建了一个类似于颜色选择器的按钮:单击它会在弹出框中显示collectionView。 我首先使用一个包含视图+collectionView(嵌入为scrollView+clipView)的nib文件来实现它。 这东西很好用

由于nib文件非常简单(并且为了提高以编程方式设计视图的编码技能),我决定放弃nib文件,并在代码中编写缺少的部分。 问题是,除了collectionView的内容之外,我设法完成了工作。经过深入调查,似乎在方法内部:

func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem
管理数据源的方法

collectionView.makeItem(withIdentifier: String, for: IndexPath)
不起作用。事实上,在:

let item = collectionView.makeItem(withIdentifier: ColorPickerPopover.itemIdentifier, for: indexPath)
项未初始化,正如调试程序在我介入时所说(不是nil,未初始化)。显然,makeItem方法从未从我创建的子类实例化任何collectionViewItem。 标识符很好,并且调用collectionView.register函数,就像在nib版本中一样,因为这两个项目在这些点上是相同的。makeItem函数根本不调用我已经子类化的NSCollectionViewItem的loadView方法

有线索吗


Josh

使用
collectionView.makeItem(带标识符:for:)
方法,首先需要在collection视图中注册类或nib文件:

使用类

使用
寄存器(\uquo:forItemWithIdentifier:)
(第一个参数接受
AnyClass?

使用Nib文件

使用
寄存器(quo:forItemWithIdentifier:)
(第一个参数接受
NSNib?

关键是:在Nib文件中,还必须确保将
NSCollectionViewItem
添加到场景中。您还必须将对象的类设置为子类才能使其工作(您可以在inspector的面板上进行设置)


希望这有帮助

非常感谢你!另外,为了添加,您必须添加一个对象,并将其设置为
NIB
文件中的自定义单元格类,而不是files owner对象(这不起作用)。
collectionView.register(MyCustomCollectionViewItemSubclass.self, forItemWithIdentifier: "SomeId")
let nib = NSNib(nibNamed: "MyCollectionViewItem", bundle: nil)!
collectionView.register(nib, forItemWithIdentifier: "SomeId")