2009-06-29 5 views

Répondre

1

D'abord, dans votre table data source, implémentez les méthodes nécessaires pour le glissement des lignes de la table. Vous allez mettre les données représentant la ligne sur le tableau de montage glisser dans un ou plusieurs types de données. Un type que vous utiliserez pour cela est NSFilenamesPboardType, qui prend un tableau de chemins d'accès.

Ensuite, créez une sous-classe de NSImageView capable de gérer NSFilenamesPboardType en gouttes. (Vous devrez implémenter des méthodes à partir de the NSDraggingDestination informal protocol.) Ensuite, faites en sorte que votre vue d'image soit une instance de cette sous-classe, au lieu de NSImageView, et register cette vue pour NSFilenamesPboardType.

2

Merci beaucoup. Ça a vraiment marché. J'ai enregistré NSImageView et NSTableView pour NSStringPboardType et NSFilenamesPboardType. Ensuite, dans le délégué TableView, j'ai utilisé le code suivant.

- (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard 
{ 
    NSString *string = [filePath objectAtIndex:[rowIndexes firstIndex]]; 
    [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self]; 
    [pboard setString:string forType:NSStringPboardType]; 
    return YES; 
} 

Et dans le protocole informel NSImageView NSDragging Destination, utilisé le code suivant.

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender 
{ 
    NSString *str = [[sender draggingPasteboard] stringForType:NSStringPboardType]; 
    myImage = [[NSImage alloc] initWithContentsOfFile:str]; 
    [self setImage:myImage]; 
    [self setNeedsDisplay: YES]; 
    return NSDragOperationCopy; 
} 

cheers :)

+0

Il vous suffit de vous inscrire le point de vue de réception (la vue de l'image), et non le point de vue d'envoyer (l'affichage du tableau), pour le type traîné. À moins que vous ne souhaitiez autoriser la suppression sur la vue de table, mais cela nécessite plus de méthodes de source de données. –

+0

Aussi, n'oubliez pas de libérer ce que vous avez allocked. Voir le Guide de programmation de gestion de mémoire pour Cocoa: http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/ –

+0

Oui. tu as raison. Je vais l'implémenter. Merci beaucoup encore une fois. :) –

Questions connexes