drag-and-drop - texto - seo de las imagenes
Imagen de arrastre personalizada con NSTableView como fuente de arrastre (2)
En su fuente de datos , querrá configurar las imágenes, por ejemplo, desde su tableView:draggingSession:willBeginAtPoint:forRowIndexes:
method like so
[session enumerateDraggingItemsWithOptions:NSDraggingItemEnumerationConcurrent
forView:tableView
classes:[NSArray arrayWithObject:[NSPasteboardItem class]]
searchOptions:nil
usingBlock:^(NSDraggingItem *draggingItem, NSInteger index, BOOL *stop)
{
[draggingItem setDraggingFrame:NSMakeRect(0, 0, myWidth, myHeight)
contents:myFunkyDragImage];
}];
¿Es necesario subclasificar NSTableView o NSTableCellView para crear una imagen de arrastre personalizada cuando tableView es la fuente de arrastre?
Si no, ¿cuál es el método mágico que me falta para hacer esto? Parece que no puedo encontrar nada sólido.
Las subclases NSTableCellView pueden anular (ligeramente misteriosamente):
@property(retain, readonly) NSArray *draggingImageComponents
(matriz de instancias NSDraggingImageComponent que se compondrán juntas (quién sabe de qué manera se compondrán ...))
NSTableView tiene
- (NSImage *)dragImageForRowsWithIndexes:(NSIndexSet *)dragRows tableColumns:(NSArray *)tableColumns event:(NSEvent *)dragEvent offset:(NSPointPointer)dragImageOffset
Pero estas son, de hecho, opciones de subclases, parece.
¿Alguien conoce otra técnica aquí? (10.8+ es el objetivo)
Parece como si NSTableViewCell
@property(retain, readonly) NSArray *draggingImageComponents
no se llama automáticamente, pero se debe hacer referencia explícita a las vistas de tabla basadas en vistas. -draggingImageComponents
se puede anular para suministrar los componentes utilizados para componer la imagen de arrastre.
- (void)tableView:(NSTableView *)tableView draggingSession:(NSDraggingSession *)session willBeginAtPoint:(NSPoint)screenPoint forRowIndexes:(NSIndexSet *)rowIndexes
{
// configure the drag image
// we are only dragging one item - changes will be required to handle multiple drag items
BPPopupButtonTableCellView *cellView = [self.columnsTableView viewAtColumn:0 row:rowIndexes.firstIndex makeIfNecessary:NO];
if (cellView) {
[session enumerateDraggingItemsWithOptions:NSDraggingItemEnumerationConcurrent
forView:tableView
classes:[NSArray arrayWithObject:[NSPasteboardItem class]]
searchOptions:nil
usingBlock:^(NSDraggingItem *draggingItem, NSInteger idx, BOOL *stop)
{
// we can set the drag image directly
//[draggingItem setDraggingFrame:NSMakeRect(0, 0, myWidth, myHeight) contents:myFunkyDragImage];
// the tableview will grab the entire table cell view bounds as its image by default.
// we can override NSTableCellView -draggingImageComponents
// which defaults to only including the image and text fields
draggingItem.imageComponentsProvider = ^NSArray*(void) { return cellView.draggingImageComponents;};
}];
}
}