2010-01-10 14 views
5

J'essaie d'écrire du code absolument barebones où je peux faire glisser un simple fichier 'dot.txt' sur une NSWindow et lire dans les données (et rien de plus fantaisiste que ça), mais tous les exemples que j'ai pu trouver utilisent des images et des NSViews etc. La section 'Dragging File Contents' d'Apple dans sa documentation "Drag and Drop Programming Topics pour Cocoa" confirme que glisser vers une plaine NSWindow (plutôt que dans un NSView etc.) est possible et semble discuter exactement de ce que j'essaie de faire, mais en tant que débutant relatif, je trouve toujours sa référence à des images et des cadres déroutants.Comment faire glisser et déposer un fichier '.txt' dans obj-c

Quelqu'un peut-il m'aider s'il vous plaît en me montrant où 'registerForDraggedTypes' autre que de le mettre en soi, une méthode 'initWithFrame' ou 'initWithCoder', et pour quels types de s'inscrire? Une fois que je reçois la fenêtre pour reconnaître mon glisser, je peux m'inquiéter des autres choses 'performDragOperation' et 'draggingEntered' plus tard.

Merci :-)

Répondre

6

Ceci est une partie de code qui je travaille. Vous pouvez trouver cette méthode lorsque vous avez créé un nouveau projet.

-(void)applicationDidFinishLaunching:(NSNotification*)aNotification 
{  
    [window registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]]; 
} 

Je suis débutant aussi. Quoi qu'il en soit, cela a fonctionné pour moi.

Et puis, c'est important. Nous devons connecter cet objet à l'objet fenêtre pour gérer les messages de suppression dans cet objet

Ouvrez MainMenu.xib et Interface Builder apparaîtra. Dans Interface Builder, connectez 'App Delegate' (cet objet) à la sortie 'Delegate' de 'Window'. (Vous pouvez trouver la sortie 'déléguer' dans le panneau Inspecteur) Maintenant, 'App Delegate' reçoit les messages d'événement de 'Window'.

Et puis, ajoute méthode plus dans le même fichier de classe:

-(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender 
{ 
    return NSDragOperationGeneric; 
} 
-(BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender 
{ 
    NSPasteboard* pbrd = [sender draggingPasteboard]; 
    // Do something here. 
    return YES; 
} 
+0

Ceci est OK pour le cas particulier où vous avez un délégué de l'application qui a un 'sortie window', mais normalement une fenêtre serait gérée par un 'NSWindowController' et vous devez enregistrer les types de glisser dans la méthode' -windowDidLoad' du contrôleur de fenêtre. La réponse est correcte en général cependant. –