2012-01-15 7 views
7

En mi aplicación Mac, anulo y acepto ciertas teclas mediante la función keyUp en un NSView, que no está destinado a aceptar pulsaciones de teclas.Evitar el pitido 'no permitido' después de la pulsación de una tecla en NSView

Cuando se pulsa una tecla, la función keyUp es llama, y ​​lo hago procesar la pulsación de tecla, sin ni siquiera llamar super keyUp:, y todo funciona, excepto que también hace que el sonido 'doonk' por defecto que ocurre cuando se pulsa una llave en algún lugar que no deberías.

¿Hay alguna manera de indicar que la pulsación de tecla fue manejada y aceptada, y que no necesito un pitido para decirle al usuario que no?

Respuesta

11

Creo (pero no estoy 100% seguro, ha pasado un tiempo desde que hice esto) también debe reemplazar el NSView y/o el NSResponderperformKeyEquivalent: método. Allí, devolverá un YES para indicarle a la persona que llama que efectivamente manejó el evento.

Y eso mantendrá el sonido "dooonk".

+0

Gracias! Solo copie y pegue mi sentencia 'if' desde mi función' keyUp: 'a esta y agregue' return's. :) – Greg

+0

¿Hay alguna manera de deshacerse de este sonido sin subclases? –

+0

Me gustaría aclarar que debe colocar su código de 'keyDown:' o equivalente en 'performKeyEquivalent:' (es decir, reemplaza los otros métodos). Además, si está utilizando el método 'flagsChanged:' para detectar claves como CMD, entonces debe seguir usando 'flagsChanged:'. –

0

En lugar de usar keyUp:, es posible que desee utilizar la acción moveUp:, ya que toma todas las molestias de determinar qué tecla manejar fuera de la mezcla. También hay rutinas de nombre similar para abajo y una variedad para el manejo de movimiento con las selecciones, etc.

Para más documentación sobre este tema, consulte la Cocoa Event-Handling Guide, y en particular, "Manejando acciones de teclado e introducción de texto", en el que se analiza la uso de estos comandos en "Aplicaciones distintas de las que tratan con texto".

En particular, la otra ventaja de usar estas acciones es que evita cualquier problema con la interpretación de teclas o teclados especiales y diseños de teclado.

+0

Todo el problema está en que no estoy usando 'NSTextView's, y los objetos personalizados no son cuerpos de texto, sino cosas como imágenes y otros controles, y necesito pulsaciones de teclas como Eliminar, Cmd + C, etc., no arrastrar el mouse y teclas de flecha. – Greg

+0

No estoy seguro de qué tiene que ver NSTextView con nada. Utilizo esta técnica en varias vistas que son subclases directas de NSView y funcionan bien. Las diversas acciones move *: se implementan como parte de la cadena de respuesta predeterminada de NSView y estoy bastante seguro de que cualquier vista que acepte reciba estas acciones. De hecho, tengo una serie de productos de envío que hacen justamente eso sin un NSTextView a la vista. – gaige

+0

Pero las diversas acciones 'move *:' son solo para teclas de flecha, y necesito otras teclas y combinaciones también. – Greg

Cuestiones relacionadas