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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top