Necesito generar una ventana que se colocará justo encima de la ventana principal en una aplicación de cacao. Quiero que esta ventana principal permita al usuario ingresar texto en un cuadro de entrada. Todo está bien hasta que el cuadro de entrada de texto en realidad gana foco. La ventana principal se vuelve "desactivada". Esta ventana no tiene bordes y es una forma ligeramente personalizada, es más como una carta flotante que otra cosa, supongo.Cocoa/Objective-C - Ventana secundaria con entrada de texto sin ventana principal inactiva
Básicamente, me gustaría que esto funcionara casi exactamente como Spotlight (Apple + Space) - puede ingresar texto, pero esta es una operación tan auxiliar que en el contexto de la mayor UX, no lo hace t desea que el efecto discordante de la ventana principal se cangreje (se vuelva inactivo). Notará que cuando tiene alguna aplicación abierta y enfocada, Spotlight no hará que la ventana de esa aplicación se vuelva inactiva.
Este problema surge porque la entrada de texto parece REQUERIR que la ventana secundaria se convierta en la ventana clave (no le permitirá colocar el cursor en el campo de entrada de texto). Cuando se convierte en clave, la ventana principal se vuelve inactiva.
Hasta ahora he tratado:
- subclases NSWindow para mi aplicación principal y primordial isKeyWindow tal que sólo pierde clave cuando la aplicación ya no se centran los usuarios (en contraposición a la ventana) es. Esto tuvo el efecto involuntario de colisionar con el estado de la clave de la ventana secundaria y tener efectos muy extraños en la entrada del teclado (algunas teclas no se capturan, como eliminar)
- Crear una vista en lugar de una ventana. No funciona debido al problema this; no se puede dibujar sobre Webkit WebView en estos días.
Anybody Cocoa/OSX wizards tienen alguna idea? Me he vuelto un poco obsesionado con este. Un picor que no puedo rascar.
Editar: también han intentado anular lo siguiente en la ventana secundaria. Cuando se hace clic, la ventana hace que la ventana principal de la aplicación se vuelva inactiva.
- (BOOL)canBecomeKeyWindow {
return YES;
}
- (BOOL)canBecomeMainWindow {
return NO;
}
Edición 2: Después de enroscar sobre la NSMenu por un tiempo, lo desechó ese enfoque. Parece que encontré algo, sin embargo. En NSPanel hay una máscara de estilo de ventana llamada:
NSNonactivatingPanelMask
The panel can receive keyboard input without activating the owning application.
Valid only for an instance of NSPanel or its subclasses; not valid for a window.
intentar esto ahora ...
Datos 3: NSNonactivatingPanelMask no hizo el truco. Sin ideas.
¿Alguna vez encontró una solución para esto? Lo siento, lo habría contactado por correo electrónico, pero parece que su sitio no funciona. – Wesley