ЧТО?:
У меня есть 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:
ПРОБЛЕМЫ:
NSCollectionView
, похоже, неиметь возможность стать firstReponder, даже если я реализую -acceptsFirstResponder
и -acceptsFirstMouse:
: пользователь всегда должен дважды щелкнуть , чтобы выбрать элемент;
Когда яхочу перетащить файл из Finder в NSCollectionView, представление не вызывает методы делегата (в представлении структуры -...validateDrop:...
я заставляю NSOutlineView расширять ячейку, затем я делаю NSCollectionView первым респондентом через [[self window] makesFirstResponder:[myCell collectionView]
или [myCell collectionView becomes FirstResponder]
).
Когда я добавляю объект к другому родительскому элементу в 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];
Кто-нибудь сталкивался с подобной ситуацией?Любой совет будет высоко оценен.Спасибо.