NSOutlineView不可拖动,为什么?

时间:2012-08-05 01:25:51

标签: drag nsoutlineview

我使用Apple的示例“Outline View”作为文件浏览器。我有一个DataSource& FileSystemItem与Apple编写的完全相同。我无法单击并按住然后拖动文件名或文件夹名称。单击时,selectedRow变为蓝色。正如我所说,没有任何反应。如果我按住蓝线,则滚动浏览文件列表。

我已经浏览过Apple的“Drag N Drop Outline View”代码,这不是我想要的。我不想重新排序文件并从OutlineView中拖动它们。我想将文件名(最终其路径)拖动到NSTextfield。我无法让NSOutlineView注册拖动操作。

我已将NSOutlineView子类化并尝试:

- (void)awakeFromNib {
    [_outlineView registerForDraggedTypes:[NSArray arrayWithObjects:LOCAL_REORDER_PASTEBOARD_TYPE, NSStringPboardType, NSFilenamesPboardType, nil]];
    [_outlineView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];
}

以及 - (NSDragOperation),draggingEntered, - (void)registerForDraggedTypes等...

我没有任何特殊代码将文本从NSScrollView拖动到此NSTextField。显然,NSOutlineView不会继承NSScrollView的本机拖动功能吗?

那么如何让NSOutlineView允许我拖动。同样,Apple的DragNDropOutlineView比我想要的更多,没有做我想要的,也没有帮助我弄清楚如何获得拖曳能力。

1 个答案:

答案 0 :(得分:1)

您可以像这样声明registerForDraggedTypes

[outline_view registerForDraggedTypes:[NSArray arrayWithObjects:LOCAL_REORDER_PASTEBOARD_TYPE,NSColorPboardType,NSDragPboard, nil]];

您需要实现此方法以在NSOutlineView

中执行拖动操作
- (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pasteboard
{

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:items];
    [pasteboard declareTypes:[NSArray arrayWithObject:LOCAL_REORDER_PASTEBOARD_TYPE] owner:self];
    [pasteboard setData:data forType:LOCAL_REORDER_PASTEBOARD_TYPE];
    return YES;   
}

这将允许拖动NSOutlineView行..