私は同じ問題に遭遇しました。
私が見つけたのは、ビューをサブクラス化することが、画像データをペーストボードに挿入するのに最適な場所であるということです。これが私が複数のファイルに対してそれを行う方法です:
- (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デリゲートを介して次のように設定することをお勧めします。
- (NSUInteger) webView:(WebView *)webView dragDestinationActionMaskForDraggingInfo:(id <NSDraggingInfo>)draggingInfo {
return WebDragDestinationActionEdit;
}
さて、今私が直面している問題です。あなたが私に答えてくれることを本当に願っています。1つのファイルを選択しても問題ありません。複数のファイルを選択すると、それらを取得して、すべてを適切にペーストボードに追加します。UIDelegateの(5)に到達し、draggingPasteboardのカウントを調べても、期待どおりの結果が得られます。ただし、残念ながら、ドキュメントフラグメントは一度だけ作成され、同様に1つのノードのみが挿入されます。
複数のフラグメントを作成して、それらをすべて挿入できるようにする方法はありますか?
前もって感謝します。