我有点迷失在这里:
我创建了一个像colorPicker一样的按钮:单击它会在弹出框中显示一个collectionView.
我首先用一个包含视图的nib fil来实现它的集合视图(嵌入在scrollView中的一个clipView).
东西工作得很好.
我创建了一个像colorPicker一样的按钮:单击它会在弹出框中显示一个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.您还必须将对象的类设置为子类才能使其工作(您可以在检查器的面板上设置它).
希望这可以帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。