La mise en œuvre de glisser et déposer dans NSTableView
Quelqu'un peut m'aider à mettre en œuvre de glisser et de les déposer dans un NSTableView? J'ai utilisé ce code ci-dessous, mais ces méthodes ne sont pas appelé lors de l'exécution.
- (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard
{
//Copy the row numbers to the pasteboard.
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes];
[pboard declareTypes:[NSArray arrayWithObject:@".gif"] owner:self];
[pboard setData:data forType:@".gif"];
return YES;
}
- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)op
{
//Add code here to validate the drop
if (row > [ m_imageArray count])
return NSDragOperationNone;
if (nil == [info draggingSource]) //From other application
{
return NSDragOperationNone;
}
else if (self == [info draggingSource]) //From self
{
return NSDragOperationNone;
}
else //From other documents
{
[tv setDropRow: row dropOperation: NSTableViewDropAbove];
return NSDragOperationCopy;
}
NSLog(@"validate Drop");
return NSDragOperationCopy;
}
- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id <NSDraggingInfo>)info
row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation
{
NSPasteboard* pboard = [info draggingPasteboard];
NSData* rowData = [pboard dataForType:@".gif"];
NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData];
NSInteger dragRow = [rowIndexes firstIndex];
//Move the specified row to its new location...
}
OriginalL'auteur akhil gupta | 2011-05-10
Vous devez vous connecter pour publier un commentaire.
Vous devez déclarer un personnalisé faites glisser tapez pour votre vue de la table et ensuite appeler
registerForDraggedTypes:
avec votre type personnalisé. Sinon, comme vous l'avez remarqué, aucune de ces méthodes seront appelées.OriginalL'auteur willbur1984
Voici un exemple
C'est une réponse plus complète, merci pour votre temps.
OriginalL'auteur Bob Ueland
J'ai l'habitude d'observer ce genre d'erreur quand j'ai oublié de brancher le
dataSource
à laNSTabeView
de l'IB, à savoir la classe de mise en œuvre de latableView:writeRowsWithIndexes:toPasteboard:
méthode de la NSTableViewDataSource.OriginalL'auteur Jay
Faire glisser et Déposer des NSTableview à l'aide de données de base
Registre de la table objet de vue pour faire glisser et déposer:-
Glisser-déposer Délégué méthodes:-
OriginalL'auteur Rakesh Purohit
Vous pouvez vous inscrire pour draggedTypes pour un NSMutableArray ou NSMutableDictionary ou tout autre objet.Extrait de Code suivant est un NSMutableArray.
[tableView registerForDraggedTypes:[NSArray arrayWithObject:@"NSMutableArray"] ];
OriginalL'auteur Ram
Vous devez déclarer un
registerForDraggedTypes
méthode dansawakFromnib
comme ça.
OriginalL'auteur NewStack
- Je recommande à la fois cette excellente Pull over Rouge blog
http://www.red-sweater.com/blog/274/a-moveable-beast
Il fournit une NSArrayController sous-classe qui permettra de faire glisser et de les déposer à modifier l'ordre des éléments de tableau, et si vous voulez soutenir les faisant glisser à l'extérieur de la tableview avec vos objets, nous avons juste écrit un pur et simple addition à cette classe:
http://www.rwe-uk.com/blog/comments/nstableview_drag_and_drop_with_bindings_and_nsarraycontroller
Il s'appuie sur le post original
OriginalL'auteur rougeExciter