【问题标题】:NSOutlineView drag promises with directoriesNSOutlineView 拖动承诺与目录
【发布时间】:2013-09-01 01:58:09
【问题描述】:

如何实现NSOutlineViewDataSource 以允许在拖动到Finder 时拖动文件系统中不存在的目录?我搜索并阅读了大量文档,但很难找到任何有价值的东西。我使用一个自定义数据源来管理类似文件系统的树,所有项目都是跟踪其路径的类的实例。我希望能够将文件和目录从大纲视图中拖到 Finder 中。

我有:

- (BOOL)outlineView:(NSOutlineView *)outlineView 
         writeItems:(NSArray *)items 
       toPasteboard:(NSPasteboard *)pasteboard 
{
    NSMutableArray *types = [NSMutableArray array];
    for (JOItemInfo *itemInfo in items) {
        NSString *extension = itemInfo.name.pathExtension;
        if (extension.length > 0) [types addObject:extension];
    }

    [pasteboard declareTypes:@[(__bridge_transfer NSString *)kPasteboardTypeFileURLPromise] 
                       owner:self];
    [pasteboard setPropertyList:types 
                        forType:(__bridge_transfer NSString *)kPasteboardTypeFileURLPromise];
    DDLogInfo(@"Wrote types %@ to pasteboard %@ for key %@", 
               types, 
               pasteboard, 
               (__bridge_transfer NSString *)kPasteboardTypeFileURLPromise);
    return YES;
}

以及-outlineView:namesOfPromisedFilesDroppedAtDestination:forDraggedItems: 的实现,它将项目写入给定路径内。这样做的原因是我可以将项目拖到 Finder 中,但是当我放手时,什么也没有发生,甚至没有调用 -...namesOfPromisedFilesDropped... 方法。还有,

[self.outlineView setDraggingDestinationFeedbackStyle:NSTableViewDraggingDestinationFeedbackStyleRegular];
[self.outlineView setDraggingSourceOperationMask:NSDragOperationNone forLocal:YES];
[self.outlineView setDraggingSourceOperationMask:NSDragOperationCopy forLocal:NO];

在我的-awakeFromNib 中。 if (extension.length > 0) ... 是基于我在某处找到的一个示例,但它已经过时了,并且文档说要返回一个扩展名,所以我认为这是合适的。就个人而言,我发现整个领域的文档非常缺乏,尤其是关于NSOutlineView。谢谢!

【问题讨论】:

    标签: objective-c drag-and-drop nsoutlineview nspasteboard


    【解决方案1】:

    我将(__bridge_transfer NSString *)kPasteboardTypeFileURLPromise 更改为NSFilesPromisePboardType,现在我可以拖动文件(至少带有扩展名),并且可以将它们成功拖放到Finder 中。 (我使用了前者的 b/c,后者的文档建议这样做,但它们没有相同的效果。)

    另外,我尝试删除条件并允许它为空扩展添加一个空字符串,这就像一个魅力。我现在可以将大纲视图拖出到 Finder 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2014-07-13
      相关资源
      最近更新 更多