-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 10/7/11 10:25 PM, GW Rodriguez wrote: > I have gone through many different threads on this, read the docs > and went over a few example projects. For some reason I cannot > get reordering via drag and drop to work. I have even created a > new project with only a NSTableView with one column and pasted code > from a working example and it still wont work. > > My guess is my error is somewhere around the > registerForDraggedTypes method because I cannot even start the > drag. It only start to highlight multiple selections. I dont > fully understand that method and I should also note that all the > example projects are document based projects and mine is not.
Code would really help here. To get to the point where dragging *begins* you need to minimally do the following: 1) Have a data source (an object that, in 10.6 and newer, conforms to NSTableViewDataSource) properly set for your table. I repeat: make sure your data source is assigned to the object in which you are implementing your dragging methods. 2) In your data source, return YES from –tableView:writeRowsWithIndexes:toPasteboard:. If you do this, you will be able to start a drag (but won't be able to drop it anywhere yet). Note what I did not mention: * Whether the app is document based is irrelevant. * You DON'T need to call -registerForDraggedTypes:. This method is used to set which pasteboard types the view potentially _accepts_ from a drag. If you don't register one or more types, the table view won't let you drop a row that you are dragging, but it will let you begin a dragging session. * You DON'T need to implement anything other than a return in –tableView:writeRowsWithIndexes:toPasteboard:. Of course, if you don't you won't actually be storing any pasteboard data, so the drag will be useless - but the drag will still visually begin. So, check on your implementation of the two steps listed earlier. You might consider breaking on –tableView:writeRowsWithIndexes:toPasteboard: to make sure it's getting called. After you have nailed that down and can see a drag begin, you will need to flesh out the full dragging procedure. In particular: 1) DO call -registerForDraggedTypes: and give it an array of UTIs; for a table view, this may be a single custom UTI you define for internal use and which you will use in the dragging methods where required. 2) DO fully implement –tableView:writeRowsWithIndexes:toPasteboard:. For row reordering purposes, it may be as simple as: - - (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard { NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes]; [pboard declareTypes:[NSArray arrayWithObject:MyAwesomeCustomUTIStringThatIDeclaredSomewhere] owner:self]; [pboard setData:data forType:MyAwesomeCustomUTIStringThatIDeclaredSomewhere]; return YES; } 3) DO implement - -tableView:validateDrop:proposedRow:proposedDropOperation:, most likely returning NSDragOperationMove for a row reordering operation. 4) DO implement -tableView:acceptDrop:row:dropOperation: to reorder the rows and/or update the model (if appropriate), typically returning YES if it's a simple row reordering. Good luck - feel free to post a link to your sample project if you can't get it to work. - -- Conrad Shultz Synthetiq Solutions www.synthetiqsolutions.com -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.14 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk6RZ9sACgkQaOlrz5+0JdVHhgCfcYVJb9z4LPGSYse8lqlL1j9Z Y84AnjBIrGlea59mWTKqLnnVejOBxXUg =YAKg -----END PGP SIGNATURE----- _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com