Estoy buscando una solución fácil para eliminar filas de NSTableView presionando la tecla de eliminar. Todo lo que he visto al buscar en Google fueron respuestas como esta: http://likethought.com/lockfocus/2008/04/a-slightly-improved-nstableview/. Esto me parece una solución de ingeniería, pero me gustaría saber si esta es la mejor manera. ¿Alguien sabe una mejor respuesta?NSTableView + clave de eliminación
Respuesta
Implementé algo similar al LTKeyPressTableView
. Sin embargo, utilizo controladores de matriz, así que en mi subclase agregué IBOutlet NSArrayController * relatedArrayController
. En lugar de manejar la solicitud de eliminación en un delegado, lo manejo directamente en la subclase, ya que mi subclase trata específicamente con el manejo adicional de la tecla Eliminar. Cuando detecto la tecla presionar para borrar la tecla, solo llamo al [relatedArrayController delete:nil];
.
IRTableView.h:
#import <Cocoa/Cocoa.h>
@interface IRTableView : NSTableView {
IBOutlet NSArrayController * relatedArrayController;
}
@end
y IRTableView.m:
#import "IRTableView.h"
@implementation IRTableView
- (void)keyDown:(NSEvent *)event
{
// Based on LTKeyPressTableView.
//https://github.com/jacobx/thoughtkit/blob/master/LTKeyPressTableView
id delegate = [self delegate];
// (removed unused LTKeyPressTableView code)
unichar key = [[event charactersIgnoringModifiers] characterAtIndex:0];
if(key == NSDeleteCharacter)
{
if([self selectedRow] == -1)
{
NSBeep();
}
BOOL isEditing = ([[self.window firstResponder] isKindOfClass:[NSText class]] &&
[[[self.window firstResponder] delegate] isKindOfClass:[IRTableView class]]);
if (!isEditing)
{
[relatedArrayController remove:nil];
return;
}
}
// still here?
[super keyDown:event];
}
@end
resultado final es bastante IB-amigable para mí, y una solución muy simple para su uso en un cacao enlaces + Core Aplicación de datos
Lo que suelo hacer es crear un nuevo elemento de menú en la barra de menú de la aplicación. Algo así como:
File -> Delete ${Name of Item}
A continuación, puede vincular esa NSMenuItem
en Interface Builder para que apunte a un método IBAction definido en alguna parte en cualquiera delegado de la aplicación o algún otro controlador. La implementación de este método debe eliminar el elemento de su modelo y actualizar el NSTableView
.
La ventaja de hacer una NSMenuItem
fuera de la acción es que:
- le puede dar la opción de una combinación de teclas en el Interface Builder. (Como la tecla de borrar).
- Los usuarios que no estén familiarizados con su aplicación, teman presionar la tecla Eliminar o no tengan acceso a un teclado por el motivo que sea, aún pueden hacer uso de esta funcionalidad.
Después de 10.10, NSViewController es parte de la cadena de respuesta. Así que la forma más fácil es implementar keyDown en su NSViewController subclasificado
Buen punto sobre el uso de la cadena de respuesta para evitar la creación de subclases (cuando sea posible). –
No es necesario crear una subclase y capturar keyDown
en NSViewController
.
El elemento de menú Delete
en el menú Edit
está conectado al selector delete:
de First Responder. Si no hay un elemento de menú Delete
, cree uno y conéctelo al delete:
de First Responder (cubo rojo).
- Asignar una clave equivalente para el elemento
Delete
menú (⌫ o ⌘⌫) En el controlador de vista implementar el método
IBAction
Swift:
@IBAction func delete(_ sender: AnyObject)
Objetivo- C:
-(IBAction)delete:(id)sender
y ponga en la lógica para eliminar la (s) fila (s) de vista de tabla.
- 1. Algoritmo/biblioteca de eliminación de clave Chroma
- 2. NSTableView seccionado usando NSArrayController
- 3. Ordenando NSTableView
- 4. Eliminación de una clave de un documento usando MongoDB Mangosta
- 5. NSTableView con celdas personalizadas
- 6. Ocultando el encabezado NSTableView?
- 7. Teclas de flecha con NSTableView
- 8. NSTableView makeViewWithIdentifier través de nibs
- 9. NSTableView - Desactivar selección de fila
- 10. Animar filas en un NSTableView
- 11. Ordenando un NSArrayController respaldado NSTableView
- 12. Arrastrando desde NSTableView para quitar
- 13. NSTableView personalizado con NSTableCellView personalizado?
- 14. Evento NSTableView y retroceso (eliminar fila) - fieldeditor/firstresponder?
- 15. mejor manera de manejar múltiples NSTableView (s)
- 16. NSTableView Altura de fila basada en NSStrings
- 17. NSTableView y NSOutlineView de arrastrar y soltar
- 18. Cambiar colores de filas alternativas NSTableView
- 19. Eliminación/eliminación de grupo en Xcode
- 20. Actualización/eliminación de lotes EF5
- 21. NSDateFormatter en View basado en NSTableView
- 22. Colorear una fila en un NSTableView
- 23. ¿Arrastrar y colocar archivos en un NSTableView?
- 24. NSTableView y arrastre y suelte desde Finder
- 25. Poblando NSTableview desde una matriz mutable
- 26. Animar una fila en un NSTableView
- 27. ¿Cómo añadir un NSTableView desplazable mediante programación
- 28. ¿Cómo deshabilitar la ordenación en NSTableVIew?
- 29. alineando texto verticalmente en la fila NSTableView
- 30. Seleccionar una fila en un NSTableView Programmatically
Hola, Craig. Tu respuesta no fue la que realmente esperaba, ¡pero suena bastante bien! = D Muchas gracias. – Leandro
Jaja sí, al principio parece una aproximación bastante indirecta, pero funciona extremadamente bien, y se ocupa de muchos dolores de cabeza. –
a menos que tenga dos vistas de tabla ... – peetonn