我正在尝试在我的 MacOS 应用程序中启用 NSOutlineView 的拖放功能。我想将子项从一个文件夹拖到大纲视图中的另一个文件夹。
我有 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
他们都没有被呼叫。我的笔尖设置正确,我的大纲视图已填充,并且除拖放功能外的所有功能都正常工作。
我还注册了从笔尖唤醒的拖动类型:
[_paraOutlineView registerForDraggedTypes:[NSArray arrayWithObject:@"QStyleSheetModel"]];
我也写过这个:
[_paraOutlineView setDraggingSourceOperationMask:NSDragOperationMove forLocal:YES];
可能是什么原因?
我已经成功解决问题了!尽管我最初无法查明确切的问题,但事实证明,我的代码中重写的函数“setDataSource”正在调用属于不同接口的“init”函数。对“init”函数的意外调用阻止了“writeItems:toPasteBoard”的执行。解决方案是删除对“init”函数的调用,现在一切都按预期工作。