2010-01-17 13 views
39

Estoy buscando una lista completa de los códigos de tecla disponibles que se pueden utilizar con la clase NSEvent de Cocoa. La clase NSEvent tiene una propiedad keyCode, que se define como unsigned short. El siguiente código, cuando se coloca en un objeto de interfaz de usuario adecuada, se hará eco de los códigos de tecla a medida que se presionan:¿Dónde puedo encontrar una lista de códigos clave para utilizar con la clase NSEvent de Cocoa?

- (void)keyDown:(NSEvent *)theEvent 
{ 
    NSLog(@"%d", [theEvent keyCode]); 
} 

A partir de este código, puedo ver fácilmente qué códigos coincide con ciertas teclas, pero me gustaría encontrar una documento oficial en algún lugar que los enumera a todos. Me espera que Apple tiene un archivo de cabecera en alguna parte que se veía así:

enum { 
    ... 
    NSKeyCodeLeftArrow = 123, 
    NSKeyCodeRightArrow = 124, 
    ... 
}; 

Pero si hay uno, sin embargo, tengo que encontrarlo.

+2

Tenga en cuenta que las claves de medios y las claves como "Inicio", "Internet" en los teclados masivos se tratan con eventos definidos por NSSystem, en lugar de eventos de teclas normales. Eso explica los códigos clave que faltan para esas claves (Windows tiene códigos clave para todas las claves, y también hay claves X11 para ellos, pero los códigos clave de Mac para eventos de teclado no parecen cubrir todas esas claves). –

+0

[W3C DOM Level 3 KeyboardEvent code Values] (https://www.w3.org/TR/2015/WD-DOM-Level-3-Events-code-20150428/) – davidcondrey

Respuesta

20

Por lo que yo sé, no hay enumeración o lista de códigos de tecla. Sin embargo, para conseguir un comportamiento similar, puede llamar interpretKeyEvents: en keyDown: que llamar a los métodos de acción adecuados, todos los cuales están documentadas en NSResponder (por ejemplo moveLeft:, insertTab:, etc.)

+1

Eso es increíblemente útil. ¡Muchas gracias! –

+9

Ahora que sé qué buscar, encontré un enlace que describe todos los métodos de NSResponder en términos de las combinaciones de teclas predeterminadas que los invocan: http://www.hcs.harvard.edu/~jrus/Site/System % 20Bindings.html –

+0

Esa página es muy útil. Buen hallazgo! :) –

27

Here you go. Es un mapa de toda la tecla virtual -códigos en el diseño de teclado extendido de EE. UU., desde el antiguo Inside Macintosh: Text. La mayoría de los códigos de clave siguen vigentes, aunque sospecho que los teclados de Apple más nuevos, aquellos con teclas multimedia, pueden haber cambiado algunas de las teclas de función.

Nota: Los teclados ISO y no extendidos pueden tener diferentes códigos de tecla para algunas teclas. Si tiene dicho teclado, intente la aplicación Peter Maurer's Key Codes. Su sitio está inactivo, por lo que here's my copy.

+0

Gracias. Eso sin duda explica por qué no hay una nueva tabla disponible.FTA: * Mac OS X usa los mismos códigos de tecla virtuales que usó para el legendario Apple Extended Keyboard. Por lo tanto, la tabla en el interior de Macintosh: texto todavía se aplica. * –

+1

Escribí el artículo. ☺ Es cierto para los teclados extendidos de los EE. UU. (Y * definitivamente * es cierto para mi teclado, ya que * es * un Teclado extendido Apple II), pero puede no ser cierto para los teclados no extendidos y/o no estadounidenses. Debo añadir una nota a la publicación que no he marcado en ninguno de los casos. –

+0

¡Ah, así lo hiciste! Buena cosa. No puedo creer que estés (¿todavía?) Usando ese teclado. :) Al leer un poco en línea, parece haber algo parecido a una * religión * basada en ese modelo. ¿Qué lo hace mucho mejor que cualquier cosa actualmente en el mercado? Soy realmente curioso. –

6

De acuerdo con este tema del foro, las constantes están disponibles en HIToolbox/Events.h

http://forums.macrumors.com/showthread.php?t=780577

Tienen convenientemente copiar + pegar todo el conjunto de constantes en el foro también. De lo contrario, la cabecera está disponible aquí:

/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h 
12

Incluir HIToolbox/Events.h (como se menciona en la respuesta de berrange) en Xcode 4 sólo tiene que ir al enlace binarios con bibliotecas y añadir el marco de carbono (que incluye HIToolbox) y luego importe el encabezado principal de Carbono en el archivo donde está revisando los códigos de clave.

#import <Carbon/Carbon.h> 

Me tomó un segundo para darse cuenta de que no podía importar HIToolbox/Events.h directamente así que pensé que había puesto esto en caso de que ayuda a alguien.

+1

Gracias, si encuentra esta pregunta , esta es la solución a usar. – petert

+2

No es necesario vincularse con el marco Carbon para usar esas enumeraciones. Es suficiente agregar el encabezado para poder usarlos en este caso particular (a menos que, por supuesto, necesite hacer uso de otras funciones de Carbon). – diegoreymendez

+0

Vale la pena señalar (ya que la pregunta era sobre 'NSEvent') que además de los códigos clave en' HIToolbox/Events.h', también puede desear los puntos de código Unicode definidos en 'NSEvent.h' de AppKit, como' NSRightArrowFunctionKey ', ya que estos se utilizan para establecer la propiedad' characters' de 'NSEvent'. –

Cuestiones relacionadas