无法拖动到 NSCollectionViewItem 中的图像上

Cannot drag onto image in NSCollectionViewItem

我正在设计一个类似于 Finder 的文件夹浏览器应用程序。我想让用户能够从应用程序外部拖动文件并将它们放到我的应用程序内的文件夹中,从而将拖动的项目添加到该文件夹​​中。

我的自定义 NSCollectionViewItem 对象 ArchiveCollectionViewItem 由一个 NSImageView 和一个 NSTextField 组成。图像视图连接到 ArchiveCollectionViewItem 的 imageView 出口,文本字段连接到 textField 出口。

collectionView:itemForRepresentedObjectAtIndexPath:中找到NSCollectionViewItem对应的item并显示:

- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView
itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath
{
    if (collectionView == self.collectionView && 0 == indexPath.section)
    {
        NSCollectionViewItem *item =
                [collectionView makeItemWithIdentifier:@"ArchiveCollectionViewItem" forIndexPath:indexPath];
        if (item && [item isKindOfClass:[ArchiveCollectionViewItem class]])
        {
            ArchiveCollectionViewItem *archiveCollectionViewItem = (ArchiveCollectionViewItem *) item;
            ArchiveItemViewModel *archiveItem = [self archiveItemAtIndexPath:indexPath];
            archiveCollectionViewItem.archiveItemViewModel = archiveItem;

            return archiveCollectionViewItem;
        }
        else
        {
            return item;
        }
    }
    else
    {
        return nil;
    }
}

ArchiveCollectionViewItem的setArchiveItemViewModel方法如下:

- (void)setArchiveItemViewModel:(ArchiveItemViewModel *)archiveItemViewModel
{
    _archiveItemViewModel = archiveItemViewModel;
    NSString *itemName = archiveItemViewModel.name;
    NSImage *itemImage = archiveItemViewModel.isFolder ?
            [NSImage imageNamed:NSImageNameFolder] :
            [[NSWorkspace sharedWorkspace] iconForFileType:itemName.pathExtension.lowercaseString];
    self.imageView.image = itemImage;
    self.textField.stringValue = itemName;
}

除了项目被拖到 ArchiveCollectionViewItem 的图像上之外,一切都按预期工作。当我将一个项目拖到 ArchiveCollectionViewItem 的非图像部分时,我得到绿色加号表示有效放置:

但是,当我将项目拖到图像部分时,绿色加号消失了。此外,collectionView:validateDrop:proposedIndexPath:dropOperation: 不会被调用:

我应该怎么做才能让整个 ArchiveCollectionViewItem 视图接受放置?或者这是不可能的/不允许的?

大多数其他 NSCollectionView 拖放问题侧重于在应用程序内拖放(重新排列)或从应用程序内部拖放到应用程序外部。需要明确的是,这些都不是我的用例。我还没有找到另一个与我的类似的 SO 问题(到目前为止),所以如果存在,请接受我的道歉并 link 我来解决。

即使图像视图不可编辑,它显然仍然可以处理拖放。要修复此问题,请调用图像视图的 unregisterDraggedTypes 方法。

同样的问题: