1

私が取り組んでいるココア アプリにドラッグ アンド ドロップ機能を実装しました。フォルダー、デスクトップ、またはハード ドライブの特定の場所からアプリのステータス バー アイコンにファイルをドラッグ アンド ドロップすると、アプリはそれを適切に検出し、問題なくファイルを操作できます。まったく。

私が遭遇する問題は、ドック (グリッド ビューで開く) の [ダウンロード] アイコンをクリックし、そこからファイルを選択してステータス バーにドラッグ アンド ドロップすると、アプリがそれをまったく検出しないことです。このシナリオでは、「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;

}

どんな助けでも大歓迎です。ありがとうございました。

4

0 に答える 0