IKImageBrowserView のドラッグ アンド ドロップ動作を削除
-
27-09-2019 - |
質問
デフォルト (と思われる) では、IKImageBrowserView は Finder 内の場所へのドラッグ アンド ドロップを有効にします。この動作を無効にしたいのですが、その方法がわかりません。おそらく NSDraggingDestination プロトコルを実装してオーバーライドすることでこれを解決できるのではないかと考えていましたが、今のところうまくいきません。
助けてくれてありがとう!
解決
は、ブラウザのデータ・ソース・オブジェクト内の- (NSUInteger) imageBrowser:(IKImageBrowserView *) aBrowser writeItemsAtIndexes:(NSIndexSet *) itemIndexes toPasteboard:(NSPasteboard *)pasteboard
メソッドを実装することができます。それはあなたがドラッグをやったときにペーストボードの上に載せていきたいと思いますどのような種類のデータ定義できます。あなたは完全に無効にドラッグしたい場合は、単に0(あなたがドラッグしたいアイテムの数)。
他のヒント
Lion をターゲットにしている場合は、サブクラス化できます。 IKImageBrowserView
そしてオーバーライドします draggingSession:sourceOperationMaskForDraggingContext:
NSDraggingSource プロトコル 方法。アプリケーションの外へのドラッグを防ぐには、単に return してください。 NSDragOperationNone
コンテキストが次の場合 NSDraggingContextOutsideApplication
. 。それ以外の場合は、関心のあるドラッグ操作を返します。このようにして、デスクトップや Finder などへのドラッグを禁止できます。ただし、アプリケーションの画像ブラウザ ビュー内でのドラッグは許可されます。
- (NSDragOperation)draggingSession:(NSDraggingSession *)session sourceOperationMaskForDraggingContext:(NSDraggingContext)context {
[super draggingSession:session sourceOperationMaskForDraggingContext:context];
switch (context) {
case NSDraggingContextOutsideApplication:
return NSDragOperationNone;
break;
case NSDraggingContextWithinApplication:
return NSDragOperationAll;
break;
default:
return NSDragOperationAll;
break;
}
}