sistema responde preferencias mac está esta dónde donde cocoa

cocoa - responde - ¿Cómo se abre la ventana de la aplicación cuando se hace clic en el icono del dock?



preferencias del sistema iphone (6)

Me sorprende que esto no ocurra automáticamente, pero me gustaría que la ventana de mis aplicaciones se abra automáticamente cuando se hace clic en el icono Dock.

Solo para aclarar, cuando abro la aplicación, la ventana se abre automáticamente, pero cuando hago clic en la cruz de la ventana pero dejo la aplicación ejecutándose, la ventana no se abre cuando hago clic en el ícono del dock.


Como señalaron otros, usar el método applicationShouldHandleReopen para volver a abrir ventanas cerradas en aplicaciones que no son de documentos es la manera correcta. El único cambio que deseo agregar es una forma más flexible de verificar qué ventana se debe volver a mostrar, al recorrer la lista de .windows visibles e invisibles de .windows y verificar la ventana requerida.

func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { if flag == false { for window in sender.windows { if (window.delegate?.isKind(of: WelcomeWindowController.self)) == true { window.makeKeyAndOrderFront(self) } } } return true }

Apéndice

a) Si la ventana estaba oculta, se mostrará automáticamente cuando el usuario haga clic en el icono Dock de la aplicación, por lo que no es necesario implementar el método applicationShouldHandleReopen .

b) La opción marcada "Liberar cuando está cerrada" no afecta de ninguna manera el comportamiento anterior.


Esto es lo que estoy haciendo para recuperar la ventana principal de una aplicación que no está basada en documentos una vez que se ha cerrado. Sé que esta podría no ser la manera correcta de hacerlo, pero hasta ahora me funciona.

Implementado esto en AppDelegate, la ventana se define como variable de instancia del mismo objeto.

- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender { [window makeKeyAndOrderFront:self]; return NO; }

Si alguien tiene una mejor solución, responda. ¡Gracias!


Una aplicación basada en documentos abrirá automáticamente un nuevo documento sin título cuando la aplicación se active, por lo que supongo que se refiere a una aplicación que no está basada en documentos.

Implemente el método applicationDidBecomeActive: en su aplicación delegue y abra / muestre la ventana.

Editar:

Algo de información sobre los Delegates .

Parte de la información sobre Apertura y cierre de Windows y la API NSWindow


Una solución para agregar a la respuesta aceptada:

Con la respuesta aceptada, la ventana reabierta ya no reaccionó a los eventos del mouse.

Al usar la respuesta aceptada, también debe asegurarse de desactivar "Liberar cuando se cierre" en el Inspector de Atributos de la ventana en IB. Esto soluciona el problema de la ventana que no responde.


Implementar - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag en el delegado de su aplicación. Verifique la documentación para los detalles del valor de retorno.

Las aplicaciones basadas en documentos y las aplicaciones que no están basadas en documentos se comportan de forma ligeramente diferente. Si no hay ventanas abiertas cuando se hace clic en el icono del dock de una aplicación basada en documentos, se creará un nuevo documento. Si no hay ventanas abiertas cuando se hace clic en el icono del muelle de una aplicación que no está basada en documentos, entonces no hará nada.


- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag { if (flag) { return NO; } else { [YourWindow makeKeyAndOrderFront:self];// Window that you want open while click on dock app icon return YES; } }