FruityFred
  • Blog
  • Course à pied
    • Tests équipements
  • Randonnées
  • Magie
    • Tours de cartes
  • Recettes
    • Entrées
    • Plats
    • desserts
  • À propos
    • CV
    • Contact
  • Accueil
  • Développement
  • Cocoa
  • Glisser-déposer de fichiers dans votre application

Glisser-déposer de fichiers dans votre application

Publié le 19 janvier 2009 par FruityFred dans Cocoa, Développement, Tutoriels
1

Dans cet article, je vais vous montrer comment on peut très simplement gérer le drag and drop de fichiers depuis le Finder vers votre application.

Il faut créer une sous-classe de NSView, par exemple DropFilesView. Dans cette classe, il faut indiquer à Cocoa que cette vue accepte la dépose de fichiers par drag and drop. Pour cela, on implémente la méthode -awakeFromNib comme ceci :

- (void) awakeFromNib {
    [self registerForDraggedTypes:
     [NSArray arrayWithObjects: NSFilenamesPboardType, nil]
    ];
    // Attention à ne pas oublier le "nil" en dernier argument de
    // arrayWithObjects !
}

Je vous rappelle que la méthode -awakeFromNib est appelée automatiquement lorsque votre application est chargée par Cocoa : c’est donc un emplacement judicieux pour initialiser des données propres à la vue. Il faut ensuite implémenter les méthodes suivantes, en fonction des besoins :

- (NSDragOperation)draggingEntered:(id )sender {
    // Appelée UNE FOIS lorsque la souris commence à survoler la vue
    // dans un processus de drag and drop.
}
 
- (NSDragOperation)draggingExited:(id )sender {
    // Appelée lorsque la souris quitte la zone de survol de la vue
    // dans un processus de drag and drop.
}
 
- (NSDragOperation)draggingUpdated:(id )sender {
    // Appelée à chaque fois que la souris est déplacée au dessus de la vue
    // dans un processus de drag and drop.
}

Ces trois méthodes retournent toutes une valeur de type NSDragOperation, indiquant si la dépose est autorisée (NSDragOperationGeneric, …) ou pas (NSDragOperationNone). Ces méthodes peuvent donc servir à vérifier que la vue accepte bien les données qui sont sur le point d’être déposées, auquel cas on retourne une valeur autre que NSDragOperationNone ; si la dépose n’est pas permise, on retourne NSDragOperationNone.

Enfin, il faut gérer le cas où l’utilisateur dépose effectivement les fichiers, auquel cas la méthode -performDragOperation: est appelée : il convient donc de la surcharger à votre guise…

- (BOOL)performDragOperation:(id)sender {
    // Appelée lorsque l'utilisateur a déposer les fichiers sur la vue :
    // on doit alors récupérer la liste des fichiers et les traiter...
    NSPasteboard *pboard = [sender draggingPasteboard];
    if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
        NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
        // files contient maintenant la liste des fichiers (avec chemin complet)
        // qui ont été déposés sur la vue par l'utilisateur.
        // Faites donc ici ce que vous voulez avec files ;-)
    }
    return YES; // On indique que le drag and drop a été concluant.
}

Vous pouvez télécharger le projet complet pour Xcode : DropFilesTutorial.zip.

Cocoa, drag and drop, NSView

Un commentaire sur “Glisser-déposer de fichiers dans votre application”

  1. FruityFred dit :
    27 janvier 2009 à 17:13

    Petite précision : les fichiers obtenus depuis le NSPasteboard ne sont pas forcément classés alphabétiquement.

Laissez un commentaire Annuler la réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Recherche

Catégories

Nuage de tags

Alsace Apple avis cascade chaussures château Cocoa concert Corse course à pied cuisine du monde forêt GPS HDR Interface Builder iOS iPhone Islande jeu lac Laiterie légumes Mac Mac OS X magie marathon minimalisme neige OpenGL plage poisson randonnée Strasbourg thème graphique TomTom tour de cartes trail vallée volcan wok WordPress Xcode Écosse écologie île

Derniers articles

  • De l’avenir.

    18 avril 2017
  • Pebble Time + iSmoothRun

    21 juin 2015
  • IMG_0440

    Tebble – Table interactive et connectée

    27 mai 2015
  • thumbnail blog

    La Main de la Princesse

    25 février 2015
  • thumbnail blog

    Transferts

    20 février 2015

Amis

  • /teles
  • A.D.A.N.
  • After6PM
  • Bloc-notes de Darathor
  • Blog de Florian
  • Blog de Jeff
  • Blog'ele
  • Graine de kawa
  • Joël et Ophélie
  • NikoHK
  • R2G2
  • WebLife

Méta

  • Connexion
  • Flux RSS des articles
  • RSS des commentaires
  • Site de WordPress-FR

Facebook • Twitter • YouTube

Copyright © 2015 FruityFred. Tous droits réservés.
Avant de copier une partie de mon contenu, demandez-le moi