Sans cela, vous devez cliquer sur l'icône de l'application et cliquez sur Quitter dans le menu.Une application Cocoa se ferme-t-elle lorsque la fenêtre principale est fermée? Comment faire pour fermer une application Cocoa lorsque la fenêtre principale est fermée?
Répondre
Vous pouvez implémenter applicationShouldTerminateAfterLastWindowClosed:
pour renvoyer YES dans le délégué de votre application. Mais je penserais à deux fois avant de faire cela, car c'est vraiment inhabituel sur le Mac en dehors des petites applications "utilitaires" comme la Calculatrice et la plupart des utilisateurs de Mac n'apprécieront pas que votre application se comporte si étrangement.
En fait, Apple a rejeté ma demande une fois et m'a suggéré de l'implémenter. Ils ont dit que j'avais besoin d'une manière claire de rouvrir la fenêtre principale, ou d'implémenter "applicationShouldTerminateAfterLastWindowClosed" –
@nute: Eh bien, oui, il devrait y avoir un moyen facile de rouvrir une fenêtre. Une application où vous cliquez sur l'icône et rien d'apparent n'arrive n'est pas bon UX. C'est loin de dire que les applications en général devraient se fermer quand la dernière fenêtre se ferme. – Chuck
Vous devez avoir un IBOutlet dans votre fenêtre principale. Par exemple: IBOutlet NSWindow * mainWindow;
- (void)awakeFromWindow {
[mainWindow setDelegate: self];
}
- (void)windowWillClose:(NSNotification *)notification {
[NSApp terminate:self];
}
Si cela ne fonctionne pas, vous devez ajouter un observateur à votre NSNotificationCenter pour la notification NSWindowWillCloseNotification. Ne pas oublier de vérifier si la fenêtre de droite se ferme.
Ajouter cet extrait de code à votre délégué de l'application:
-(BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)app {
return YES;
}
La question est principalement sur la programmation Cocoa et non d'une langue spécifique (Objective-C), voici la version Swift de Chuck et Steve réponse:
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationShouldTerminateAfterLastWindowClosed(sender: NSApplication) -> Bool {
return true
}
// Your other application delegate methods ...
}
pour Swift 3 changement de la définition de méthode pour
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
J'ai ajouté cette réponse dans l'esprit de la question méta [Les nouvelles réponses de Swift sur les anciennes questions Objective-C sont-elles bénéfiques?] (Http://meta.stackoverflow.com/questions/303338/are-new-swift-answers- sur-vieux-objectif-c-questions-bénéfique), et parce que j'ai fermé une nouvelle question demandant explicitement le code Swift comme doublon de celui-ci. –
Swift 3 nécessite un trait de soulignement et un espace avant le texte de l'expéditeur. – dylan
@dylan: Oui, merci! –
- 1. L'application Cocoa semble se bloquer lorsque la fenêtre principale est fermée
- 2. Arrêt modal lorsque la fenêtre est fermée (Cocoa)
- 3. Ferme toutes les boîtes de dialogue contextuelles lorsque la fenêtre principale est fermée dans ASP.NET
- 4. Actualiser la fenêtre parent lorsque la fenêtre contextuelle est fermée
- 5. fermer la fenêtre enfant automatiquement lorsque la fenêtre parent est fermée
- 6. Modèle d'application Cocoa - MainMenu.xib - Fenêtre principale
- 7. C# & Win32 notifier quand une fenêtre séparée est fermée/fermée
- 8. Comment fermer la fenêtre enfant si la fenêtre parent est fermée?
- 9. Modifier Alpha sur la fenêtre principale - Cocoa
- 10. Mon application perd le focus lorsqu'une fenêtre est fermée
- 11. silverlight 4 et Actualiser la fenêtre parent lorsque la fenêtre enfant est fermée
- 12. comment créer une fenêtre qui a ouvert lorsque fermer la fenêtre principale?
- 13. applicationShouldTerminateAfterLastWindowClosed: ne semble pas fonctionner lorsque le x rouge est utilisé pour fermer mon application Cocoa
- 14. Fermer la fenêtre principale dans le cacao?
- 15. Déterminez comment une application est fermée
- 16. Applescript activer la fenêtre fermée
- 17. Comment faire pour mettre au point une fenêtre WPF modale lorsque la fenêtre principale de l'application est cliquée
- 18. Fermer les ressources non managées lorsque l'application WPF est fermée
- 19. Fenêtre d'affichage WPF avant la fenêtre principale
- 20. Winforms Databound ComboBox ne se met pas à jour lorsque la fenêtre est fermée
- 21. Faire des changements à une fenêtre de navigateur une fois qu'une autre fenêtre est fermée
- 22. comment charger une vue dans la fenêtre principale avec pyobjc?
- 23. Événement déclencheur sur une page lorsqu'une fenêtre contextuelle est fermée
- 24. Cocoa se concentrer sur mon application
- 25. Retour à la fenêtre principale une fois secondView est chargée
- 26. Comment détecter quand la fenêtre d'action est fermée?
- 27. jquery boîte de dialogue d'alerte avant le déchargement ou lorsque la fenêtre du navigateur est fermée
- 28. comment fermer la fenêtre parent quand la boîte de couleur est fermée?
- 29. comment fermer, fermer une application WPF lorsque l'utilisateur a besoin de le fermer
- 30. L'utilisation d'un iframe dans jquery.simplemodal, le reload iframe lorsque la fenêtre est fermée
Bien que ce soit une question valide, reconsidérer le faire. Si votre application doit toujours avoir sa fenêtre principale, désactivez-la à la place. –
Assez juste, je le ferai. Je vous remercie! –
Je ne suis pas d'accord. Dans la plupart des applications à fenêtre unique, y compris la Calculatrice et (de nos jours) les Préférences Système, vous êtes autorisé à fermer la fenêtre, ce qui entraîne la fermeture de l'application. Et j'ai personnellement utilisé des applications qui sont allées dans l'autre sens, et j'ai été frustré quand j'ai essayé de fermer la fenêtre principale et j'ai reçu un bip au lieu de la fermeture/arrêt que je voulais. –