相关疑难解决方法(0)

NSCollectionViewItem永远不会实例化

我在这里有点迷失:我创建了一个像colorPicker一样的按钮:单击它会在弹出框中显示一个collectionView.我首先使用包含视图+ collectionView(嵌入在scrollView + clipView中)的nib fil.东西工作得很好.

由于nib文件非常简单(并且为了提高我在编程方式设计视图时的编码技巧),我决定摆脱nib文件并在代码中编写缺失的部分.问题是,我设法完成工作,除了collectionView的内容.经过深入调查,看来,方法内部:

func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem
Run Code Online (Sandbox Code Playgroud)

这应该是管理数据源的方法

collectionView.makeItem(withIdentifier: String, for: IndexPath)
Run Code Online (Sandbox Code Playgroud)

不起作用.事实上,在:

let item = collectionView.makeItem(withIdentifier: ColorPickerPopover.itemIdentifier, for: indexPath)
Run Code Online (Sandbox Code Playgroud)

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

任何线索?

玩笑

macos nscollectionview nscollectionviewitem swift

4
推荐指数
1
解决办法
1830
查看次数

以编程方式使用数据源创建NSCollectionView

我正在尝试NSCollectionView使用a 以编程方式创建NSCollectionViewDataSource.

代码很简单:

self.collectionView = [[NSCollectionView alloc] init];
// Add collection view to self.view etc. 
self.collectionView.dataSource = self;
[self.collectionView registerClass:[NSCollectionViewItem class] forItemWithIdentifier:@"test"]
self.collectionView.collectionViewLayout = gridLayout;
[self.collectionView reloadData]
Run Code Online (Sandbox Code Playgroud)

这导致调用以下方法(如果我没有collectionViewLayout显式设置属性,则这两个方法也不会被调用):

- (NSInteger)numberOfSectionsInCollectionView:(NSCollectionView*)collectionView
- (NSInteger)collectionView:(NSCollectionView*)collectionView numberOfItemsInSection:(NSInteger)section
Run Code Online (Sandbox Code Playgroud)

但是,collectionView:itemForRepresentedObjectAtIndexPath:永远不会被称为.为了确保调用最后一个数据源方法,我还需要做些什么吗?我确保两个计数调用返回> 0,所以这不是问题.

macos cocoa objective-c nscollectionview

2
推荐指数
1
解决办法
1368
查看次数