En MacOS 10.7 se agregaron algunos protocolos nuevos para implementar esto.
Hay una lack of documentation for tables en el momento pero se pueden encontrar algunos ejemplos bonito:
Para NSTableViwew Protocolo NSTableViewDataSource define los siguientes métodos:
(BOOL)tableView:writeRowsWithIndexes:toPasteboard:
tableView:validateDrop:proposedRow:proposedDropOperation:
tableView:acceptDrop:row:dropOperation:
Para NSOutlineView el Protocolo NSOutlineViewDataSource define los siguientes métodos:
(BOOL)outlineView:writeItems:toPasteboard:
(NSDragOperation)outlineView:validateDrop:proposedItem:proposedChildIndex:
(BOOL)outlineView:acceptDrop:item:childIndex:
Estos son los requisitos mínimos para implementar para cada tipo de vista. Los casos de uso son bastante similares.
- Si el método toPasteboard: devuelve SÍ, se inicia el arrastre.
- El validateDrop: controles de métodos que tienen como objetivo nodo se permite mediante la actualización del marcador en la vista
- Volver SÍ para la acceptDrop: método si la caída fue exitosa
Esto condujo a dos sub-casos de uso que tiene administrar. El primero es un arrastrar & caer dentro de la misma vista o la misma operación entre dos vistas. Además, puede distinguir entre mover, copiar o eliminar operaciones. Un buen ejemplo es cómo funcionan los puntos de interrupción con arrastrar & soltar en Xcode.
TableView tiene algunos métodos adicionales para personalizar la función de arrastrar &, pero los que he mencionado son los métodos clave para que funcione.
El enlace termina como 404, y no puedo encontrar el código original en ninguna parte. –
@ François Beausoleil: Gracias; He actualizado el enlace. –
Esa forma perfectamente lógica y limpia de hacer esto. Gracias por volver a vincular –