私が取り組んでいるココア アプリにドラッグ アンド ドロップ機能を実装しました。フォルダー、デスクトップ、またはハード ドライブの特定の場所からアプリのステータス バー アイコンにファイルをドラッグ アンド ドロップすると、アプリはそれを適切に検出し、問題なくファイルを操作できます。まったく。
私が遭遇する問題は、ドック (グリッド ビューで開く) の [ダウンロード] アイコンをクリックし、そこからファイルを選択してステータス バーにドラッグ アンド ドロップすると、アプリがそれをまったく検出しないことです。このシナリオでは、「performDragOperation」は呼び出されません。これは、ダウンロード グリッドが特定の場所ではなく、デスクトップに表示されるダウンロード フォルダーを表しているためだと思います。
これは、ドラッグの種類を登録する場所です。
- (id)initWithStatusItem:(NSStatusItem *)statusItem {
CGFloat itemWidth = [statusItem length];
CGFloat itemHeight = [[NSStatusBar systemStatusBar] thickness];
NSRect itemRect = NSMakeRect(0.0, 0.0, itemWidth, itemHeight);
self = [super initWithFrame:itemRect];
if (self != nil) {
_statusItem = statusItem;
_statusItem.view = self;
}
NSArray *dragTypes = [NSArray arrayWithObjects:NSFilenamesPboardType, NSURLPboardType, nil];
[self registerForDraggedTypes:dragTypes];
return self;
}
dragEntered メソッドは次のとおりです。
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender {
ApplicationDelegate *appdelegate = (ApplicationDelegate *)[[NSApplication sharedApplication] delegate];
if (!appdelegate.isApplicationLoggedIn) {
return NSDragOperationNone;
}
if ([sender draggingSourceOperationMask] & NSDragOperationCopy) {
return NSDragOperationCopy;
}
if ([[sender draggingPasteboard] availableTypeFromArray:[NSArray arrayWithObjects:NSFilenamesPboardType, NSURLPboardType, nil]]) {
return NSDragOperationCopy;
}
return NSDragOperationNone;
}
どんな助けでも大歓迎です。ありがとうございました。