首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCollectionViewItem从不实例化

NSCollectionViewItem从不实例化
EN

Stack Overflow用户
提问于 2016-08-24 09:24:11
回答 1查看 2.5K关注 0票数 5

我在这里有点迷失了:我创建了一个像colorPicker的按钮:单击它在弹出窗口中显示一个collectionView。我首先使用的是一个包含视图+ collectionView (嵌入在scrollView +a clipView中)的nib。这些东西运作得很好。

由于nib文件非常简单(并且为了提高编程设计视图的编码技能),我决定去掉nib文件,并在代码中编写缺少的部分。问题是,除了collectionView的内容之外,我还设法完成了任务。经过深入调查,看来在该方法内:

代码语言:javascript
复制
func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem

用于管理数据源的方法

代码语言:javascript
复制
collectionView.makeItem(withIdentifier: String, for: IndexPath)

不起作用。事实上,在以下方面:

代码语言:javascript
复制
let item = collectionView.makeItem(withIdentifier: ColorPickerPopover.itemIdentifier, for: indexPath)

项未初始化,正如调试器在我进入时(不是零,uninitialized). )所说的那样。显然,makeItem方法从未实例化我创建的子类中的任何collectionViewItem。标识符很好,并且调用了collectionView.register函数,就像在nib版本中一样,因为这两个项目在这些点上是相同的。makeItem函数根本不调用我已经子类的NSCollectionViewItem的loadView方法。

有线索吗?

乔希

EN

回答 1

Stack Overflow用户

发布于 2016-09-15 16:27:13

使用collectionView.makeItem(withIdentifier:for:)方法,首先需要在集合视图中注册类或nib文件:

使用类

使用register(_:forItemWithIdentifier:) (第一个参数接受AnyClass?)

代码语言:javascript
复制
collectionView.register(MyCustomCollectionViewItemSubclass.self, forItemWithIdentifier: "SomeId")

使用Nib文件

使用register(_:forItemWithIdentifier:) (第一个参数接受NSNib?)。

代码语言:javascript
复制
let nib = NSNib(nibNamed: "MyCollectionViewItem", bundle: nil)!
collectionView.register(nib, forItemWithIdentifier: "SomeId")

关键是:在您的Nib文件中,您还必须确保在场景中添加了一个NSCollectionViewItem。您还必须将对象的类设置为您的子类,这样它才能工作(可以在检查器的面板上设置它)。

希望这能有所帮助!

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39119345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档