¿Cómo hacer que una aplicación Cocoa se cierre cuando la ventana principal está cerrada? Sin eso, tiene que hacer clic en el ícono de la aplicación y hacer clic en Salir en el menú.¿Se cierra la aplicación Cocoa cuando la ventana principal está cerrada?
Respuesta
Puede implementar applicationShouldTerminateAfterLastWindowClosed:
para devolver SÍ en el delegado de su aplicación. Pero lo pensaría dos veces antes de hacer esto, ya que es realmente inusual en la Mac fuera de pequeñas aplicaciones de "utilidad" como Calculator y la mayoría de los usuarios de Mac no apreciarán que su aplicación se comporte de forma tan extraña.
En realidad, Apple rechazó mi aplicación una vez y me sugirió que implementara esto. Dijeron que necesitaba una forma clara de volver a abrir la ventana principal o implementar "applicationShouldTerminateAfterLastWindowClosed" –
@nute: Bueno, sí, debería haber una manera fácil de volver a abrir una ventana. Una aplicación en la que haga clic en el ícono y no ocurra nada aparente no es un buen UX. Eso está muy lejos de decir que las aplicaciones en general deberían dejar de funcionar cuando se cierra la última ventana. – Chuck
Debe tener un IBOutlet en su ventana principal. Por ejemplo: IBOutlet NSWindow * mainWindow;
- (void)awakeFromWindow {
[mainWindow setDelegate: self];
}
- (void)windowWillClose:(NSNotification *)notification {
[NSApp terminate:self];
}
Si esto no funciona, se debe añadir un observador a su NSNotificationCenter para la notificación NSWindowWillCloseNotification. No olvide verificar si la ventana derecha se está cerrando.
Añadir este fragmento de código al delegado de su aplicación:
-(BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)app {
return YES;
}
Como la cuestión es sobre todo acerca de la programación de cacao y no se trata de una específica idioma (Objective-C), aquí está la versión Swift de Chuck y Steve de respuesta:
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationShouldTerminateAfterLastWindowClosed(sender: NSApplication) -> Bool {
return true
}
// Your other application delegate methods ...
}
para Swift 3 cambio de la definición del método de
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
He agregado esta respuesta en el espíritu de la meta pregunta [¿Las nuevas respuestas de Swift en las viejas preguntas de Objective-C son beneficiosas?] (Http://meta.stackoverflow.com/questions/303338/are-new-swift-answers- on-old-objective-c-questions-beneficial), y porque cerré una pregunta más nueva pidiendo explícitamente código Swift como duplicado de este. –
Swift 3 requiere un guión bajo y espacio antes del texto del remitente. – dylan
@dylan: ¡Sí, gracias! –
- 1. Actualizar ventana padre cuando la ventana emergente está cerrada
- 2. detectar cuando la aplicación está cerrada
- 3. ¿Cómo ejecutar la función de la ventana principal cuando se cierra la ventana secundaria?
- 4. Liberar un NSWindowController cuando la ventana está cerrada
- 5. detectando cuando la ventana emergente "Descarga de archivo" está cerrada
- 6. ¿Cómo ejecutar la función de la ventana primaria cuando se cierra la ventana secundaria?
- 7. javascript: ¿Cómo puede una ventana principal saber que su ventana hija está cerrada?
- 8. funciones Eliminar Elimina incluso cuando la aplicación está cerrada llamando
- 9. Cómo deshabilitar Android LocationListener cuando la aplicación está cerrada
- 10. ¿Cómo cerrar una aplicación JavaFX en la ventana cerrada?
- 11. La aplicación WPF no se cierra correctamente
- 12. ¿Se cierra automáticamente una SqlConnection cuando se cierra una aplicación?
- 13. ¿Se puede notificar a la ventana principal cuando se cierra una ventana secundaria? (en un dominio de diferenciación)
- 14. Salir de la aplicación cuando NSWindow se cierra
- 15. Decisiones de diseño de OS X. ¿Cerrar la aplicación en la última ventana cerrada?
- 16. La aplicación Qt permanece en la memoria incluso después de que MainWindow está cerrada
- 17. Necesita saber cuándo se cierra la aplicación
- 18. ¿Por qué se destruye el servicio remoto cuando se cierra la actividad principal?
- 19. ¿Ciclo de vida de la base de datos Sqlite? ¿Se borra cuando la aplicación está cerrada?
- 20. iPhone: cómo configurar la insignia de la aplicación, cuando la aplicación está cerrada/en segundo plano?
- 21. zócalo no se cierra después de la aplicación se cierra si un proceso iniciado está abierto
- 22. En Cocoa, ¿cómo se oculta una ventana cuando se inicia la aplicación?
- 23. Android: Guardar un estado de la instancia cuando la aplicación está cerrada
- 24. Actividad reiniciada cuando se cierra la aplicación del controlador unexception
- 25. fancybox - pasando la variable a parent cuando la ventana de fancybox está cerrada
- 26. ¿Cómo recibir notificaciones cuando la ventana se cierra en la extensión de Firefox?
- 27. Ejecutar código cuando la aplicación de Android está cerrada/enviada al fondo
- 28. Ventana emergente nunca se cierra
- 29. ¿Completamente cerrada la aplicación de subprocesos múltiples?
- 30. "¡La sesión está cerrada!" - NHibernate
Aunque esta es una pregunta válida, reconsidere hacerlo. Si su aplicación necesita tener siempre su ventana principal presente, deshabilite la posibilidad de cerrarla. –
Bastante justo, lo haré. ¡Gracias! –
No estoy de acuerdo. En la mayoría de las aplicaciones de una sola ventana, incluida la Calculadora y (hoy en día) las Preferencias del Sistema, puede cerrar la ventana y al hacerlo sale de la aplicación. Y personalmente he usado aplicaciones que se hicieron al revés, y me sentí frustrado cuando traté de cerrar la ventana principal y recibí un pitido en lugar de cerrar/cerrar lo que quería. –