Macos 无法拖到NSCollectionViewItem中的图像上

Macos 无法拖到NSCollectionViewItem中的图像上,macos,nscollectionview,nscollectionviewitem,Macos,Nscollectionview,Nscollectionviewitem,我正在设计一个类似Finder的文件夹浏览器应用程序。我希望使用户能够从应用程序外部拖动文件,并将其放到我的应用程序中的文件夹中,从而将拖动的项目添加到该文件夹中 我的自定义NSCollectionViewItem对象ArchiveCollectionViewItem由一个NSImageView和一个NSTextField组成。图像视图连接到ArchiveCollectionViewItem的imageView出口,文本字段连接到textField出口 在collectionView:itemF

我正在设计一个类似Finder的文件夹浏览器应用程序。我希望使用户能够从应用程序外部拖动文件,并将其放到我的应用程序中的文件夹中,从而将拖动的项目添加到该文件夹中

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

在collectionView:itemForRepresentedObjectAtIndexPath:中,我找到一个与NSCollectionViewItem相对应的项并显示它:

- (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拖放问题关注于在应用程序内拖放以重新排列,或从应用程序内部拖放到应用程序外部。清楚地说,这两个都不是我的用例。到目前为止,我还没有找到另一个与我类似的问题,因此如果存在,请接受我的道歉并将我与之联系起来

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


同样的问题:。

谢谢,看来这就成功了。我从来没有想到NSImageView会有这样的方法。