Supprimer glisser-déposer Comportement de IKImageBrowserView
-
27-09-2019 - |
Question
Par défaut (il semble), IKImageBrowserView permet le glisser-déposer à des endroits dans le Finder. Je voudrais désactiver ce comportement, mais je suis incertain de la façon de le faire. Je pensais que peut-être la mise en œuvre du protocole NSDraggingDestination et en remplaçant pourrait résoudre ce problème, mais jusqu'à présent, il n'a pas fonctionné pour moi.
Merci pour toute aide!
La solution
Si vous voulez personnaliser le comportement de glisser-déposer de IKImageBrowserView, vous pouvez mettre en œuvre la méthode de - (NSUInteger) imageBrowser:(IKImageBrowserView *) aBrowser writeItemsAtIndexes:(NSIndexSet *) itemIndexes toPasteboard:(NSPasteboard *)pasteboard
dans de votre navigateur objet source de données. Cela vous permettra de définir les types et les données que vous voulez mettre sur la table de montage lorsque vous faites un glisser. Si vous souhaitez désactiver entièrement glisser, vous devriez être en mesure de revenir juste 0 (le nombre d'articles que vous voulez être traîné).
Autres conseils
Si vous ciblez Lion, vous pouvez sous-classe IKImageBrowserView
et remplacer le draggingSession:sourceOperationMaskForDraggingContext:
la méthode de protocole NSDraggingSource. Pour éviter un déplacement en dehors de votre demande simplement revenir NSDragOperationNone
si le contexte est NSDraggingContextOutsideApplication
. Dans le cas contraire, le retour des opérations que vous traînaient intéressent. De cette façon, vous pouvez désavouer drags sur le bureau, le Finder, etc., mais encore permettre de glisser à l'intérieur l'image vue du navigateur de votre application.
- (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;
}
}