Pregunta

Estoy intentando configurar arrastrar y soltar muy básico para mi NSTableView. La vista de tabla tiene una sola columna (con una célula de medida). La columna se une a un NSArrayController, y la matriz el contenido de la controladora de la matriz está unido a un NSArray en mi objeto de controlador. La multa pantallas de datos en la tabla. I conectado el dataSource y delegate salidas de la vista de tabla a mi objeto de controlador, y luego implementado estos métodos:

- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard
{
    NSLog(@"dragging");
    return YES;
}

- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)op
{
    return NSDragOperationEvery;
}

- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id <NSDraggingInfo>)info
              row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation
{
    return YES;
}

También registró los tipos de arrastre en -awakeFromNib:

#define MyDragType @"MyDragType"

- (void)awakeFromNib
{
    [super awakeFromNib];
    [_myTable registerForDraggedTypes:[NSArray arrayWithObjects:MyDragType, nil]];
}

El problema es que los -tableView: writeRowsWithIndexes: toPasteboard: método es Nunca llamado . He mirado en un montón de ejemplos y no puedo averiguar nada de lo que estoy haciendo mal. Podría ser el problema que estoy usando una celda personalizado? ¿Hay algo que se supone que debo de anulación en la subclase de células para habilitar esta funcionalidad?

EDIT: Confirmado. Cambio de la celda personalizado para un NSTextFieldCell regulares hizo arrastrando el trabajo. Ahora, ¿cómo puedo hacer el trabajo de arrastrar y soltar con mi celda personalizado

¿Fue útil?

Solución 2

Me ha solucionado el problema. Parece que hay un problema con el uso de fijaciones con NSCells personalizados en una vista de tabla. El cambio a los métodos tradicionales NSTableViewDataSource en lugar de enlaces y un controlador de array resuelto.

Otros consejos

Me estaba golpeando mi cabeza contra la pared en busca de una solución más elegante al mismo problema, y ??luego me encontré con esto:

http://www.wooji-juice.com/blog/ cacao-10-bindings.html

Por ejemplo, si desea soporte de arrastrar y soltar de una tabla, es necesario configurar una fuente de datos para que - incluso si usted está utilizando fijaciones para suministrar los datos reales, se puede establecer una fuente de datos en ella, y cacao necesita uno para manejar la tableView:writeRowsWithIndexes:toPasteboard y mensajes relacionados.

Sí. Si tienes todo lo vinculado a la controladora de la matriz, lo que puede hacer es tener el controlador del conjunto de implementar las funciones de arrastrar / soltar necesarias y luego configurar la vista de tabla de origen de datos al controlador de matriz con setDataSource:.

Lo que funciona para mí es llamar initTextCell en lugar de init o initImageCell en el inicializador de mi celda personalizado (en mi caso, init). No parece importar si la superclase es NSCell o NSActionCell. Además, he vinculante, y arrastrando todavía funciona.

Eso debería ser suficiente para permitir el arrastre para empezar. ¿Estás seguro que haya conectado los métodos de delegado?

me encontré con este problema, sus necesidades de celda personalizado para extender NSActionCell no NSCell si quieres arrastrar y soltar para que funcione correctamente. Probablemente hay algo que podría poner en práctica en NSCell que haría todo el trabajo también, pero yo no cavar más lejos después de cambiar a NSActionCell. Al menos, eso ha solucionado el problema para mí.

me encontré con el problema. Tengo una subclase NSCell, y lo hice poner en práctica el tableView:writeRowsWithIndexes:toPasteboard y el origen de datos se fijó para el NSTableView. Arrastrando no funcionaría.

Si fijo el tipo de célula en mi init para la subclase personalizada

    self.type = NSTextCellType;

A continuación, arrastrando consigo. Si no lo hago, el valor predeterminado es NSNullCellType y arrastre no funciona. Supongo que la gente que tengo trabajo mediante el uso de otros trabajos subclase NSTextFieldCell debido a que el tipo de célula es diferente.

También observar el problema similar, NSTableView arrastrar y soltar no está funcionando. Tengo en mi columna 4 tableview y dos de ellos son células personalizados. Arrastrando por encargo de células no está bien a pesar de que su trabajo en el separador de células, así, sin embargo no su trabajo con células personalizados trabajando.

Mi celular costumbre fue una subclase de NSButtonCell que estaba causando la problema. Así como se sugiere, he cambiado de clase padre de NSButtonCell a NSActionCell. Ahora, arrastrando está funcionando perfectamente.

Funciona con NSCell, así como NSActionCell sin embargo, requiere una acción en mi celular para que se utiliza NSActionCell.

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