• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Views-based table drag and drop
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Views-based table drag and drop


  • Subject: Views-based table drag and drop
  • From: Scott Lahteine <email@hidden>
  • Date: Thu, 12 Apr 2012 16:34:45 -0400

Hi,

My app has a views-based table with an NSTableCellView subclass. The represented object implements the NSPasteboardReading, NSPasteboardWriting, and NSCoding protocols. All the hooks are in place for drag and drop, but I need some conceptual help to figure how to implement it properly. I would like to be able to drag both within the document window to move rows, and between document windows to copy rows.

For dragging within the same document it seemed easiest (at first) to just use tableView:writeRowsWithIndexes:toPasteboard: to store the NSIndexSet of the selected rows, and then to use that info to move the rows in the document's NSMutableArray. But in doing so, I found that draggingImageComponents is no longer called on my NSTableCellView subclass. And of course this isn't very useful information for dragging objects between documents. So obviously I need to use tableView:pasteboardWriterForRow:. But I don't quite understand how this behaves internally, or what data I should be returning.

So I have a few questions. First, what should I be returning in pasteboardPropertyListForType:? At the moment I'm returning [NSKeyedArchiver archivedDataWithRootObject:self]. Since with this option the only data in the pasteboard is the archived object, how can I use that to delete the rows from their original positions before inserting them at the drop location? (I'm only dropping above rows, not on them.) Could I instead return the object pointer in pasteboardPropertyListForType: so that I have direct references to the original row objects? Should I use the NSTableView's selectedRowIndexes to delete the original rows, then unarchive and insert the new instances? Does any of this happen automagically, just by virtue of having NSPasteboardReading implemented? Should I be using an NSArrayController to save myself the trouble?

Unfortunately the TableViewPlayground sample code isn't very helpful, because it doesn't demonstrate dragging custom class objects around, just file urls.

Any and all guidance is much appreciated, especially if you can provide sample code for exactly this kind of situation.

--
Scott Lahteine
Thinkyhead Software
_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

  • Prev by Date: Re: Watching a variable in Xcode 4.3
  • Next by Date: AVAssetWriterInputPixelBufferAdaptor on IOS attempting to write images to a video
  • Previous by thread: iOS 5: iPod Library Access, pt 2
  • Next by thread: AVAssetWriterInputPixelBufferAdaptor on IOS attempting to write images to a video
  • Index(es):
    • Date
    • Thread