swift – NSCollectionViewItem永远不会实例化

swift – NSCollectionViewItem永远不会实例化,第1张

概述我有点迷失在这里: 我创建了一个像colorPicker一样的按钮:单击它会在d出框中显示一个collectionView. 我首先用一个包含视图的nib fil来实现它的集合视图(嵌入在scrollView中的一个clipView). 东西工作得很好. 由于nib文件非常简单(并且为了提高我在编程方式设计视图时的编码技巧),我决定摆脱nib文件并在代码中编写缺失的部分. 问题是,我设法完成工作, 我有点迷失在这里:
我创建了一个像colorPicker一样的按钮:单击它会在d出框中显示一个collectionVIEw.
我首先用一个包含视图的nib fil来实现它的集合视图(嵌入在scrollVIEw中的一个clipVIEw).
东西工作得很好.

由于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)

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

任何线索?

玩笑

解决方法 使用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.您还必须将对象的类设置为子类才能使其工作(您可以在检查器的面板上设置它).

希望这可以帮助!

总结

以上是内存溢出为你收集整理的swift – NSCollectionViewItem永远不会实例化全部内容,希望文章能够帮你解决swift – NSCollectionViewItem永远不会实例化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005174.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存