我知道如何为NSCollectionView
进行拖放操作,但似乎无法阻止它“将”项目从视图中“抬起”。
我当前的解决方案是不实施
func collectionView(_ collectionView: NSCollectionView, pasteboardWriterForItemAt indexPath: IndexPath) -> NSPasteboardWriting?
来自NSCollectionViewDelegate
,以确保
func collectionView(_ collectionView: NSCollectionView, draggingImageForItemsAt indexPaths: Set<IndexPath>, with event: NSEvent, offset dragImageOffset: NSPointPointer) -> NSImage
IS 调用,我可以在其中提供自己的拖动图像。但是,这些不会聚集或提供显示要拖动多少个项目的图标。
问题在于,当我实现前一种方法时,我似乎无所事事(包括覆盖NSCollectionViewItem的draggingImageComponents
)似乎阻止了将项目从集合视图中“抬起”,从而留下了空白
拖动Photos.app中的图像和Finder.app中的文件(图标视图)不会抬起该项目,因此希望可以实现。
答案 0 :(得分:2)
这似乎与NSCollectionView - dragging shows a “hole” - want it to look like the Finder
是相同的问题我最初的解决方案是对集合视图项使用自定义视图。在子类中,我重写setHidden:
以防止在拖动项目时集合视图隐藏我的项目视图。这有一些不良的副作用。看起来,NSCollectionView在更改布局时也会隐藏项目视图。
下一个想法(到目前为止)在我的应用程序中运行良好。开始拖动时,我将取消隐藏项目视图。
@interface HGImagesCollectionViewDelegate : NSObject <NSCollectionViewDelegate>
@end
@implementation HGImagesCollectionViewDelegate
- (void)collectionView:(NSCollectionView *)collectionView
draggingSession:(NSDraggingSession *)session
willBeginAtPoint:(NSPoint)screenPoint
forItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths
{
// Prevent item from being hidden (creating a hole in the grid) while being dragged
for (NSIndexPath *indexPath in indexPaths) {
[[[collectionView itemAtIndexPath:indexPath] view] setHidden:NO];
}
// …
}
@end