2010-01-05 8 views
4

J'affiche actuellement une fenêtre modale en utilisant ce code:Arrêt modal lorsque la fenêtre est fermée (Cocoa)

[[NSApplication sharedApplication] runModalForWindow:mainWindow]; 

Cependant, quand je ferme cette fenêtre, les autres fenêtres sont toujours inactives. Comment puis-je exécuter la méthode stopModal lorsque la fenêtre est fermée en utilisant le "red x"?

Merci,

Michael

Répondre

9

Vous pouvez créer un délégué pour la fenêtre et avoir répondu ni à l'
- (void) windowWillClose: (NSNotification *) notification ou
- (void) windowShouldClose: (*) NSNotification notification méthodes comme ceci:

- (void)windowWillClose:(NSNotification *)notification { 
    [[NSApplication sharedApplication] stopModal]; 
} 

Voir Mac Dev Center: NSWindowDelegate Protocol Reference

2

Si vous avez une boîte de dialogue qui s'applique à une fenêtre spécifique, vous ne devriez probablement pas utiliser une boîte de dialogue modale mais une feuille. Les boîtes de dialogue modales devraient être évitées si possible. Si vous utilisez une feuille, le problème que vous rencontrez ne sera plus un problème.

- (void)showSheet:(id)sender 
{ 
    [NSApp beginSheet:yourModalWindow 
     modalForWindow:windowThatSheetIsAttachedTo 
     modalDelegate:self 
     didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) 
      contextInfo:nil]; 
} 

- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo 
{ 
    [sheet orderOut:self]; 
    [NSApp endSheet:sheet]; 
} 
0

Avec réponse Randall vous pouvez lier la classe de contrôleur en tant que délégué à la fenêtre définie dans votre fichier .xib.

Vous pouvez gérer la

[[NSApplication sharedApplication] stopModal]; 

soit dans

  • -(void)performClose:(id)sender

  • -(void)windowWillClose:(NSNotification *)notification

méthodes.