[Résolu] Sur le comportement lors de la fermeture d'une fenêtre.
Leeroy
Membre
Bonjour,
J'ai un problème avec le comportement lors de la fermeture d'une fenêtre. Dans le cadre d'une application qui n'est pas basée document (d'ailleurs c'est vrai aussi pour les applications basée document) lorsque qu'on clique sur le rond rouge, sur le menu fermer ou pomme-W cela ferme la fenêtre. Cela me mène à deux questions :
1 - Comment changer ce comportement pour que cela quitte le programme. Pour le menu et le raccourcie c'est facile mais pour le rond rouge ? J'ai regardé du coté de NSWindowDelegate avec la méthode willClose et j'ai tenté de forcer la fermerture avec un [NSApp terminate:self]; mais ça n'a rien donné. De plus je pense qu'il y a certainement un moyen plus simple et direct avec IB.
2 - Prenons le cas d'un projet Cocoa application vide. On compile ça ouvre la fenêtre mais si on la ferme rond rouge, menu fichier/fermer ou pomme W, impossible de la ré ouvrir (en cliquant sur l'icône dans le dock par exemple) pourtant la fenêtre est bien liée à son contrôleur et dans IB la case released When closed est décoché, donc le fenêtre est encore en mémoire et pourrait revenir au premier plan. Je suppose qu'il faudrait que j'envoie le message show à la fenêtre mais je suis étonné qu'il n'y ai rien de base.
Enfin tout ça pour dire que je trouve très étonnant qu'il n'y ai rien de base pour changer ce comportement simplement dans IB, ou alors j'ai raté un truc?
J'ai un problème avec le comportement lors de la fermeture d'une fenêtre. Dans le cadre d'une application qui n'est pas basée document (d'ailleurs c'est vrai aussi pour les applications basée document) lorsque qu'on clique sur le rond rouge, sur le menu fermer ou pomme-W cela ferme la fenêtre. Cela me mène à deux questions :
1 - Comment changer ce comportement pour que cela quitte le programme. Pour le menu et le raccourcie c'est facile mais pour le rond rouge ? J'ai regardé du coté de NSWindowDelegate avec la méthode willClose et j'ai tenté de forcer la fermerture avec un [NSApp terminate:self]; mais ça n'a rien donné. De plus je pense qu'il y a certainement un moyen plus simple et direct avec IB.
2 - Prenons le cas d'un projet Cocoa application vide. On compile ça ouvre la fenêtre mais si on la ferme rond rouge, menu fichier/fermer ou pomme W, impossible de la ré ouvrir (en cliquant sur l'icône dans le dock par exemple) pourtant la fenêtre est bien liée à son contrôleur et dans IB la case released When closed est décoché, donc le fenêtre est encore en mémoire et pourrait revenir au premier plan. Je suppose qu'il faudrait que j'envoie le message show à la fenêtre mais je suis étonné qu'il n'y ai rien de base.
Enfin tout ça pour dire que je trouve très étonnant qu'il n'y ai rien de base pour changer ce comportement simplement dans IB, ou alors j'ai raté un truc?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender
etc...
[url=http://developer.apple.com/library/mac/#documentation/cocoa/Reference/NSApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40008592-CH1-SW3NSApplicationDelegate Protocol Reference]NSApplicationDelegate Protocol Reference[/url]
Donc je ne pense pas que "applicationShouldOpenUntitledFile" fonctionne. Mais peut-être que si.. la doc ne semble pas indiquer que la méthode n'est appelé qu'avec un document based app.
Sinon, il faudrait aller avoir du côté de NSApplicationDelegate effectivement pour l'histoire de réouvrir la fenêtre en cliquant sur le Dock :
Et du côté de NSWindowDelegate pour capturer l'événement
Comme c'est une notification, tu peux faire observer les fenêtres de ton choix par autant de controller que tu le souhaite. Ainsi "toto" pourrait observer la fenêtre de "tata" afin de relâcher "tata" une fois sa fenêtre fermée.
Note que pour ton cas de quitter l'application, la méthode qui correspond le mieux est effectivement "applicationShouldTerminateAfterLastWindowClosed".. mais il arrive que l'on veuille quitter son application si la fenêtre principale se ferme, peut importe le nombre de fenêtre ouvertes (préférences... etc)
Par contre pour la réouverture ça marche pas. J'ai créer un projet Cocoa Application et j'ai modifié le AppDelegate qui est créé à la base, j'ai justé ajouté ça dans le .m
J'ai bien vérifier la variable window et bien liée à la fenêtre et dans IB la case released When closed est décoché. Mais j'ai un doute sur cette fonction... Dans la doc on peut lire
Donc j'ai l'impression que cette fonction ne marche que pour le document-based mais il n'y a aucun autre équivalent.
Notez que pour un NSPanel, pour ré afficher, je dois juste renvoyer un show à la fenêtre. Mais la j'ai pas encore trouvé ou mettre ça dans le cas de la fenêtre principal....
Merci beaucoup.
PS je ne connaissais pas cette fonction.. En fait je dois pas en connaitre plus d'une vingtaine :P je débute. Mais merci de m'expliquer clairement