Вложенный NSCollectionView в ячейке NSOutlineView (NSFirstResponder?) - PullRequest
0 голосов
/ 11 декабря 2018

ЧТО?:

У меня есть NSOutlineView, который содержит различные типы клеток.Один из этих NSTableCellView подклассов содержит NSCollectionView, который заполняется путями для загрузки изображений.

У меня, действительно, много проблем с этой моделью.

иерархия:

- NSSplitViewItem
    - NSOutlineView
        - NSTableCellView subclass (loaded from nib)...
            - ...contains NSCollectionView (parent: NSTableCellView is delegate + dataSource)
                  - NSCollectionViewItem (loaded from nib, loads image from provided path via -representedObject)

Источником данных является массив NSString, представляющий пути к изображениям.NSCollectionViewItem отвечает за загрузку изображений по методу -setRepresentedObject:

ПРОБЛЕМЫ:

  1. NSCollectionView, похоже, неиметь возможность стать firstReponder, даже если я реализую -acceptsFirstResponder и -acceptsFirstMouse:: пользователь всегда должен дважды щелкнуть , чтобы выбрать элемент;

  2. Когда яхочу перетащить файл из Finder в NSCollectionView, представление не вызывает методы делегата (в представлении структуры -...validateDrop:... я заставляю NSOutlineView расширять ячейку, затем я делаю NSCollectionView первым респондентом через [[self window] makesFirstResponder:[myCell collectionView] или [myCell collectionView becomes FirstResponder]).

  3. Когда я добавляю объект к другому родительскому элементу в NSOutlineView, тогда -reloadData, NSCollectionView переупорядочивает свои ячейки вциклический путь: т.е. 0 становится 1, 1 становится 2, 2 становится 0.

Я могу без проблем перетаскивать URL-адрес файла на NSOutlineView.При инициализации я называю это как для внутреннего перетаскивания, так и для внешнего перетаскивания:

    [_objectsView registerForDraggedTypes:@[kBBLPBoardNodeDragType, NSURLPboardType]];
    [_objectsView setDraggingDestinationFeedbackStyle:NSTableViewDraggingDestinationFeedbackStyleSourceList];
    [_objectsView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO];
    [_objectsView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];

И в NSCollectionView:

    [_collectionView registerForDraggedTypes:@[NSURLPboardType]];
    [_collectionView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];
    [_collectionView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO];

Кто-нибудь сталкивался с подобной ситуацией?Любой совет будет высоко оценен.Спасибо.

...