2011-02-09 13 views

Respuesta

2

Se puede crear una subclase de NSTableView, anulando keyDown así:

- (void)keyDown:(NSEvent *)theEvent 
{ 

    unichar key = [[theEvent charactersIgnoringModifiers] characterAtIndex:0]; 
    if(key == NSDeleteCharacter) 
    { 

     [self deleteItem]; 
     return; 
    } 

    [super keyDown:theEvent]; 

} 

A continuación, asegúrese de que cualquier NSTableView que desea tener la funcionalidad de eliminación usa su subclase en Interface Builder en lugar de la NSTableView normal.

se puede implementar el método - (void)deleteItem por ejemplo, así:

- (void)deleteItem 
{ 
    if ([self numberOfSelectedRows] == 0) return; 

    NSUInteger index = [self selectedRow]; 

    [documentController deleteItemWithIndex:index]; 

} 
+0

Si tiene varias vistas que necesita rastrear por separado desde el mismo documentController, puede identificarlas usando etiquetas , es decir, ingrese una etiqueta para la vista en Interface Builder, y luego verifique el valor del valor self.tag en el método 'keyDown:'. – Frost

+2

Lo siento, pero esta respuesta no debe marcarse como correcta. Esta solución no es la mejor práctica. – Jacque

7

Un enfoque que es fácil de implementar:

  1. +/- botones añaden a la interfaz de IB y conectarlos a un deleteRecord IBAction
  2. con la eliminación (-) botón seleccionado en el IB, navegar Atributos de Inspector> Botón> Key equivalente
  3. clic en el cuadro para empezar a grabar su pulsación de tecla, después haga clic en el Supr/Retroceso clave

Cuando se construye su proyecto, teniendo en cuenta que yo u implementar el método deleteRecord, una pulsación de tecla Retroceso borrará los registros de su tableview

+1

Sí, lo he averiguado, pero me da problemas cuando veo más de una tabla a la vez :) –

6

La forma correcta de implementar esta funcionalidad es mediante el uso de atajos de teclado:

  1. diferentes opciones del menú de eliminación en IB y establecer su clave equivalente a la tecla de retroceso, por ejemplo.
  2. Conecte la acción de elementos del menú a un método que escribió para manejar la tarea. Este método se encontrará para usted automáticamente en la cadena de respuesta, cuando lo conecta a través del primer respondedor.
  3. Implemente su funcionalidad de eliminación.

Según el tipo de aplicación que escriba, existen métodos de delegado de validación. Por lo que significa que puede establecer los elementos de menú habilitados. Para una aplicación basada en documentos, esta validación se realiza a través del - (BOOL)validateUserInterfaceItem:(id)anItem.

3

Esta es una solución moderna que usa NSViewController y First Responder.

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.

No es necesaria la subclase.

+0

¿De dónde viene la acción de eliminación? Puedo ver muchas acciones como esta en IB, pero NSResponder no las define todas. – KoCMoHaBTa

+0

@ IBAction o @ objc dan el mismo resultado. Al omitir esto, el elemento del menú Eliminar quedará fuera. – azimov

Cuestiones relacionadas