2009-03-30 22 views
19

Tengo un cuadro de diálogo con 1 o más botones y quiero poder establecer programáticamente el más a la derecha como el predeterminado, de modo que cuando el usuario presiona la tecla Intro o Retorno responda como si el usuario hizo clic.botón predeterminado NSButton con aspecto azulado

Estoy usando [btn setKeyEquivalent:@"\r"] y eso lo hace funcionar bien, pero quiero que el botón tenga el aspecto azulado que no está sucediendo. ¿Que necesito hacer?

Respuesta

34

Me faltaba configurar el estilo del bisel del botón correctamente y es por eso que no se veía correctamente. Ahora estoy programando el botón ya que esto:

[btn setBezelStyle:NSRoundedBezelStyle]; 

A continuación, cualquiera de estos trabajos para establecer el botón predeterminado:

[myWindow setDefaultButtonCell:[btn cell]]; 

o

[btn setKeyEquivalent:@"\r"] 
+0

Solo me ensucié de emoción al ver esta solución. Es increíble que no haya pensado en forzar un botón para que sea la celda de botón predeterminada y configurar forzosamente la clave equivalente. Algunas veces tiene * que * tener * para hacer esto, incluso cuando su NSView contiene una clave con su atajo configurado para regresar. Extraño pero cierto. ¡Gracias! – Kezzer

+4

En Interface Builder debe elegir el estilo 'Push'. Revisé los 15 estilos Interface Builder ofrece y solo 'Push' se ilumina en azul cuando se configura como la celda de botón predeterminada en OS X 10.8.3 (Mountain Lion). Otros tipos tomarán la clave de devolución como su clave equivalente y se convertirán en la predeterminada botón, pero solo el botón 'Push' se ilumina en azul cuando lo hace. No he probado nada en otras versiones de OS X - es muy posible que esta nota no fuera necesaria en Snow Leopard (?) Cuando esta pregunta fue hecha y respondida en 2009. – ArtOfWarfare

+0

Gracias. Esto me ayudó :) – Sid

5

La documentación dice:

Tenga en cuenta que si establece el equivalente tecla para volver, ese botón se convierte en el botón predeterminado.

Por lo tanto, lo está haciendo correctamente. Puede probar esto después de configurar la clave equivalente:

[button setNeedsDisplay:YES]; 

Esto obliga al botón a volver a dibujarse.

+0

¿Todavía se torna azulado debajo de Yosemite y arriba? No parece para mis diálogos, aunque el equivalente clave sea Retorno (pequeño símbolo de flecha hacia abajo). – Jay

1
[myWindow setDefaultButtonCell:[btn cell]]; // should do the trick. 

Ver Apple's documentation para más detalles.

2

Mi configuración ha sido una hoja de encargo donde quería que el botón predeterminado apareciera dentro de un NSAlert. La siguiente configuración me da el aspecto predeterminado azul. Funciona en 10.12.3 Sierra.

button.bezelstyle = NSBezelStyleRounded; // Push in Interface Builder 
    button.keyEquivalent = @"\r"; 
    button.highlighted = YES; // this is the most important part. 
Cuestiones relacionadas