我在这里有点迷失了:我创建了一个像colorPicker的按钮:单击它在弹出窗口中显示一个collectionView。我首先使用的是一个包含视图+ collectionView (嵌入在scrollView +a 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)项未初始化,正如调试器在我进入时(不是零,uninitialized). )所说的那样。显然,makeItem方法从未实例化我创建的子类中的任何collectionViewItem。标识符很好,并且调用了collectionView.register函数,就像在nib版本中一样,因为这两个项目在这些点上是相同的。makeItem函数根本不调用我已经子类的NSCollectionViewItem的loadView方法。
有线索吗?
乔希
发布于 2016-09-15 16:27:13
使用collectionView.makeItem(withIdentifier:for:)方法,首先需要在集合视图中注册类或nib文件:
使用类
使用register(_:forItemWithIdentifier:) (第一个参数接受AnyClass?)
collectionView.register(MyCustomCollectionViewItemSubclass.self, forItemWithIdentifier: "SomeId")使用Nib文件
使用register(_:forItemWithIdentifier:) (第一个参数接受NSNib?)。
let nib = NSNib(nibNamed: "MyCollectionViewItem", bundle: nil)!
collectionView.register(nib, forItemWithIdentifier: "SomeId")关键是:在您的Nib文件中,您还必须确保在场景中添加了一个NSCollectionViewItem。您还必须将对象的类设置为您的子类,这样它才能工作(可以在检查器的面板上设置它)。
希望这能有所帮助!
https://stackoverflow.com/questions/39119345
复制相似问题