未调用 NSOutlineView 中的拖放方法

The methods for Drag and Drop in NSOutlineView are not getting called

提问人:Ishi 提问时间:10/9/2023 最后编辑:Ishi 更新时间:10/12/2023 访问量:62

问:

我正在尝试在我的 MacOS 应用程序中启用 NSOutlineView 的拖放功能。我想在大纲视图中将一个子文件夹从一个文件夹拖到另一个文件夹。

我希望将测试资产 1 拖放到组 2 中

我有 myOutlineView 和一个控制器,它是数据源和大纲视图的委托。

在我的大纲视图控制器中,我有以下三种方法:

-(BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pboard

-(NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id < NSDraggingInfo >)info proposedItem:(id)item proposedChildIndex:(NSInteger)index

-(BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id < NSDraggingInfo >)info item:(id)item childIndex:(NSInteger)index

他们都没有被召唤。我的笔尖设置正确,我的大纲视图被填充,除了拖放功能外,所有功能都在工作。

我还在 nib 的唤醒中注册了拖动类型:

[_paraOutlineView registerForDraggedTypes:[NSArray arrayWithObject:@"QStyleSheetModel"]];

我还写了这个:

[_paraOutlineView setDraggingSourceOperationMask:NSDragOperationMove forLocal:YES];

可能是什么原因?

Objective-C Cocoa 拖放 NSOUTLINEVIEW

评论

0赞 Willeke 10/9/2023
您是否调用 setDraggingSourceOperationMask:forLocal:
0赞 Ishi 10/9/2023
@Willeke是的,我做到了。但它仍然不起作用。
0赞 Willeke 10/9/2023
实现和调用上述方法应该可以做到这一点。单元格中是否有覆盖或自定义视图?
0赞 Ishi 10/10/2023
是的,我有一个派生自 NSOutlineView 的自定义视图。但是,自定义视图中的任何函数都不会因拖动而被调用,并且这些函数不会被覆盖。
0赞 Willeke 10/10/2023
请发布一个最小的可重复示例

答:

0赞 Ishi 10/12/2023 #1

我已经成功解决了这个问题!虽然我最初无法确定确切的问题,但事实证明,我的代码中被覆盖的函数“setDataSource”正在调用属于不同接口的“init”函数。对“init”函数的意外调用阻止了“writeItems:toPasteBoard”的执行。解决方案是删除对“init”函数的调用,现在一切都按预期工作。