objective guide framework developer apple apis objective-c macos cocoa

objective-c - guide - swift ios documentation



NSWindow makeKeyAndOrderFront hace que aparezca la ventana, pero no Key o Front (3)

makeKeyAndOrderFront no está creando mi clave NSWindow o la parte frontal.

¿Mi aplicación no tiene una ventana principal o barra de menú , que puede ser parte del problema?

IBOutlet NSWindow *loginWindow; //(connected in Interface Builder to the NSWindow)

El NSWindow tiene "visible en el lanzamiento" y "liberar cuando está cerrado" ambos sin marcar.

Entonces:

- (void) applicationDidFinishLaunching:(NSNotification *)aNotification { [loginWindow makeKeyAndOrderFront:self]; }

Esto abre la ventana. (Al comentarlo, no se abre ninguna ventana).

Sin embargo:

  • Aparece detrás de la ventana Xcode (no delante).

  • Parece que recibe el enfoque del mouse, pero no tomará pulsaciones de teclas en los campos de texto que contiene la ventana. Las pulsaciones de teclas se envían a Xcode.

  • Aparece en la cuadrícula Expose cuando Expose está activado. Pero no puedo hacer clic en la ventana para seleccionarla en Exponer ... no aparecerá en la parte frontal.

¿Por qué no funciona mi ventana?


Ambas respuestas son correctas. También deberá asegurarse de anular canBecomeKey en su subclase de ventana si no tiene bordes.

Esto tomó una eternidad para averiguar. (Escribí una publicación en el blog sobre la totalidad de mi solución).


Apuñale en la oscuridad: tiene LSBackgroundOnly establecido en su lista de información. Eso es lo que hace que esto no funcione: una aplicación de fondo solo no puede aparecer en primer plano, razón por la cual su ventana no aparece en primer plano.

Si desea que su aplicación no se muestre en el Dock, configure LSUIElement en LSUIElement lugar. Esto suprime el mosaico del Dock de su aplicación y evita que muestre su propio menú principal en la barra de menú, pero conserva su capacidad de traer una ventana al frente y hacerlo clave.


Intente llamar a este método [NSApp activateIgnoringOtherApps:YES]; . Esto debería hacer que sea la aplicación activa.