Arrastre los datos de Cuerda de Mi Cacao aplicación a terceros cacao App
-
12-10-2019 - |
Pregunta
Quiero arrastrar una fila de mi tableview y colocarlo en cualquier otra NSTextField en Mac OS X 10.6, y tienen una cadena de texto puede quitar.
arrastrarlo ya se trabaja dentro de mi aplicación (entre un NSTableView y un NSBrowser), pero no he tenido éxito poniendo los datos en la mesa de trabajo que pueden aceptada por aplicaciones distintas a la aplicación de origen.
Aquí está el código que he intentado, por lo que pensé que sería suficiente para conseguir HTE palabra "hola" a ser 'pegado' cuando se me cae en alguna otra NSTextField:
-(BOOL) tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard {
[pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self];
[pboard setString:@"hello" forType:NSStringPboardType];
return YES;
}
// -
Nunca consigo el cursor que me muestra se aceptará la caída, y simplemente no funciona.
- cosas que he intentado:
- Uso de la versión 10.5 del identificador de cartón, NSStringPBoardType
- Uso de la versión 10.6, NSPasteboardTypeString.
- Ajuste del propietario = nula, ya que no estoy proporcionando los datos con pereza.
- Uso del archivador con llave: [pboard setData: [NSKeyedArchiver archivedRootObject: @ "Hola !!"]]
Ninguna de las anteriores han trabajado. Creo que tengo los conceptos correctos: "codificar datos, informe a la mesa de trabajo lo que tienes, y luego darle los datos", pero desde otras aplicaciones no lo reconocen, sospecho yo no estoy diciendo la mesa de trabajo el tipo de datos correcto .
¿Dónde voy mal?
Gracias, Woody
Solución
Añadir esto en awakeFromNib
de su clase controlador:
- (void)awakeFromNib {
[tableView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO];
// [tableView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];
}
(Esto es suponiendo que usted tiene una IBOutlet
conectado a su tableView llamado tableView
). Asegúrese de hacer esto en awakeFromNib
o posterior. (Por ejemplo, si se va a tratar de hacer esto en métodos init
de su clase controlador, sus archivos nib no serían totalmente cargado todavía, y sus de IBOutlet
estarían todos nil
y el mensaje no tendría ningún efecto).
Por defecto, la mayoría de las operaciones de arrastrar estarán limitados a la aplicación local en lugar de todas las aplicaciones. Los parámetros forLocal:
especifica si usted se refiere a las operaciones de arrastre que son locales a la aplicación (dentro de la misma aplicación), o que no es local, es decir, todas las aplicaciones. La línea que ha comentado que es básicamente lo que ya tiene el tableView hacer.