NSCollectionViewItem 不显示自定义视图

NSCollectionViewItem does not display custom view

我有一个 NSCollectionViewItem 的子class,叫做 ZMSDKThumbnailCollectionViewItem。使用它,我想显示一个由 ZMSDKThumbnailVideoItemView 表示的自定义视图。

ZMSDKThumbnailCollectionViewItem 由 XIB 文件表示。这恰好包含一个 NSView,其中 class 被设置(使用 Identity Inspector)为 ZMSDKThumbnailVideoItemView

@interface ZMSDKThumbnailCollectionViewItem : NSCollectionViewItem
@property (assign) IBOutlet ZMSDKThumbnailVideoItemView *videoItemView;
@end

在我的 NSCollectionViewDataSource 中,我创建了这样的项目:

- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath
{
    ZMSDKThumbnailCollectionViewItem* item = [collectionView makeItemWithIdentifier:@"ZMSDKThumbnailCollectionViewItem" forIndexPath:indexPath];
    ZMSDKThumbnailVideoItemView* thumbnailView = [_thumbnailVideoArray objectAtIndex:indexPath.item];

    // IBOutlet videoItemView
    item.videoItemView = thumbnailView;

    return item;
}

问题:虽然 _thumbnailVideoArray 包含元素,但集合视图中没有显示任何内容。

当我修改 ZMSDKThumbnailCollectionViewItem 使其包含 NSLabel 而不是 ZMSDKThumbnailVideoItemView 时,项目可以正确显示。

问题:我必须以何种方式创建NSCollectionViewItem来显示自定义视图?设置 class 的 class 是否正确?像我一样在 XIB 文件中包含 ZMSDKThumbnailVideoItemView 的视图?

毕竟我找到了解决方案。

不必更改项目视图的 class,而是必须向项目视图添加子视图:

- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath
{
    ZMSDKThumbnailCollectionViewItem* item = [collectionView makeItemWithIdentifier:@"ZMSDKThumbnailCollectionViewItem" forIndexPath:indexPath];
    ZoomSDKVideoElement* thumbnailView = [_videoArray objectAtIndex:indexPath.item];
    [item.view addSubview:[thumbnailView getVideoView]];

    return item;
}