デフォルトでは (どうやら)、IKImageBrowserView は Finder 内の場所へのドラッグ アンド ドロップを有効にします。この動作をオフにしたいのですが、その方法がわかりません。おそらく NSDraggingDestination プロトコルを実装してオーバーライドすることでこれを解決できると考えていましたが、これまでのところうまくいきませんでした。
助けてくれてありがとう!
デフォルトでは (どうやら)、IKImageBrowserView は Finder 内の場所へのドラッグ アンド ドロップを有効にします。この動作をオフにしたいのですが、その方法がわかりません。おそらく NSDraggingDestination プロトコルを実装してオーバーライドすることでこれを解決できると考えていましたが、これまでのところうまくいきませんでした。
助けてくれてありがとう!
IKImageBrowserView のドラッグ アンド ドロップ動作をカスタマイズする場合- (NSUInteger) imageBrowser:(IKImageBrowserView *) aBrowser writeItemsAtIndexes:(NSIndexSet *) itemIndexes toPasteboard:(NSPasteboard *)pasteboard
は、ブラウザのデータ ソース オブジェクトにメソッドを実装できます。これにより、ドラッグ時にペーストボードに配置するタイプとデータを定義できます。ドラッグを完全に無効にしたい場合は、0 (ドラッグしたいアイテムの数) を返すだけでよいはずです。
Lion をターゲットにしている場合は、 NSDraggingSource プロトコルIKImageBrowserView
メソッドをサブクラス化してオーバーライドできます。アプリケーション外へのドラッグを防ぐには、コンテキストが. それ以外の場合は、関心のあるドラッグ操作を返します。このようにして、デスクトップや Finder などへのドラッグを禁止できますが、アプリケーションの画像ブラウザー ビュー内でのドラッグは引き続き許可されます。draggingSession:sourceOperationMaskForDraggingContext:
NSDragOperationNone
NSDraggingContextOutsideApplication
- (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;
}
}