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;
}
我有一个 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;
}