gpt4 book ai didi

objective-c - 将文件拖到 cocoa OSX 中的其他应用程序中

转载 作者:行者123 更新时间:2023-12-03 17:01:39 43 4
gpt4 key购买 nike

我正在尝试将 Windows 应用程序转换为 OSX,现在一切正常,除了这个小功能,即将文件从我的应用程序拖放到任何其他支持拖放的窗口中。接收drops很简单,问题是拖拽数据的来源。

我的应用程序只有 1 个窗口和 1 个 View ,我自己在其中绘制每个控件。所以我只是这样扩展我的观点@interface NativeView : NSView <NSDraggingSource, NSPasteboardItemDataProvider> .

现在,我认为到目前为止我的代码恢复应该可以工作,但话又说回来,我对 cocoa 和 OSX 不太了解:

NSArray *fileList = [NSArray arrayWithObjects:&pathList[0] count:pathList.size()];

NSPasteboard *pboard = [NSPasteboard pasteboardWithName: NSDragPboard];
[pboard declareTypes:[NSArray arrayWithObject:NSFilenamesPboardType] owner:nil];
[pboard setPropertyList:fileList forType:NSFilenamesPboardType];

NSPasteboardItem *pbItem = [NSPasteboardItem new];
[pbItem setDataProvider:view forTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
[pbItem pasteboard:pboard provideDataForType:NSFilenamesPboardType];

NSDraggingItem *dragItem = [[NSDraggingItem alloc] initWithPasteboardWriter:pbItem];
[dragItem setDraggingFrame:NSMakeRect(0, 0, 10, 10)];


[view beginDraggingSessionWithItems:[NSArray arrayWithObjects:dragItem, nil] event:mouseEvent source:view];

fileList 是一个 NSString* 的数组。你在哪里看到 view这意味着接口(interface)NativeView ,它以这种方式实现,因为这是用 C++ 编写的;

目前,当我尝试设置 pasteboard 时,代码会阻塞。在 pbItem 。我的意思是,除了该行之外,没有执行任何其他操作。我还尝试摆脱 NSPasteboard一起使用 NSPasteboardItem仅,但我在运行最后一行时得到 EXC_BAD_ACCESS: beginDraggingSessionWithItems .

我在网上没有找到任何关于拖动文件的示例,只有 NSImage ,而且我对这种类型的拖动没有用处。

欢迎任何帮助,谢谢。

最佳答案

是的,在线文档非常缺乏。

尝试使用以下方法:

auto* dragItems = [[NSMutableArray alloc] init];
for (auto& path : pathList)
{
auto* fileURL = [NSURL fileURLWithPath: path];
auto* dragItem = [[NSDraggingItem alloc] initWithPasteboardWriter: fileURL];
[dragItem setDraggingFrame: NSMakeRect(0, 0, 10, 10)];
[dragItems addObject: dragItem];
}

[view beginDraggingSessionWithItems: dragItems
event: mouseEvent
source: view]

关于objective-c - 将文件拖到 cocoa OSX 中的其他应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40055527/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com