我遇到了同样的问题。
我发现子类化视图是将图像数据插入粘贴板的最佳位置。以下是我对多个文件的处理方式:
- (BOOL) performDragOperation:(id<NSDraggingInfo>)sender {
if ( [sender draggingSource] == nil ) {
NSPasteboard *pboard = [sender draggingPasteboard];
NSArray *classes = @[ [NSURL class] ];
NSDictionary *options = @{ NSPasteboardURLReadingFileURLsOnlyKey: [NSNumber numberWithBool:YES],
NSPasteboardURLReadingContentsConformToTypesKey: [NSImage imageTypes] };
NSArray *fileURLs = [pboard readObjectsForClasses:classes options:options];
if ( fileURLs ) {
NSMutableArray *images = [NSMutableArray arrayWithCapacity:[fileURLs count]];
for ( NSURL *fileURL in fileURLs )
[images addObject:[[NSImage alloc] initWithContentsOfURL:fileURL]];
[pboard declareTypes:[NSImage imageTypes] owner:nil];
[pboard clearContents]; [pboard writeObjects:images];
}
} return [super performDragOperation:sender];
}
我注意到的是以下顺序:
1. WebView 捕获拖动操作。
2. 内部 WebCore 创建的文档片段
3. 节点被插入到 DOMRange
4. 编辑委托被调用
5. 最后 UI 委托被调用,它已经来不及做任何事情
另外,我建议通过 UI Delegate 设置以下内容:
- (NSUInteger) webView:(WebView *)webView dragDestinationActionMaskForDraggingInfo:(id <NSDraggingInfo>)draggingInfo {
return WebDragDestinationActionEdit;
}
好的,现在是我遇到的问题,我真的希望你能给我一个答案。当我选择一个文件时没有问题。当我选择多个文件时,我会得到它们并将它们全部正确地添加到粘贴板中。即使当我到达 (5) 的 UIDelegate 并检查 draggingPasteboard 的计数时,我也得到了预期的结果。但不幸的是,文档片段只被创建一次,同样只有一个节点被插入。
任何想法如何创建多个片段以便它们都可以插入?
先感谢您。