NSCollectionViewItem не отображает пользовательское представление - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть подкласс NSCollectionViewItem, называемый ZMSDKThumbnailCollectionViewItem. Используя это, я хочу отобразить пользовательское представление, представленное ZMSDKThumbnailVideoItemView.

ZMSDKThumbnailCollectionViewItem представлен файлом XIB. Он содержит ровно один NSView, класс которого установлен (с помощью 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 для отображения пользовательского представления? Правильно ли установить класс содержащего представления в файле XIB на ZMSDKThumbnailVideoItemView как и я?

1 Ответ

0 голосов
/ 06 апреля 2020

После того, как я все-таки нашел решение.

Вместо того, чтобы менять класс вида элемента, нужно добавить подпункт к виду элемента:

- (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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...