2010-05-27 6 views

Répondre

41

Jetez un oeil à NSAlert, qui a une méthode -runModal synchrone:

NSAlert *alert = [[[NSAlert alloc] init] autorelease]; 
[alert setMessageText:@"Hi there."]; 
[alert runModal]; 

Comme Peter mentionne une meilleure alternative est d'utiliser l'alerte as a modal sheet sur la fenêtre, par exemple:

[alert beginSheetModalForWindow:window 
       modalDelegate:self 
      didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) 
       contextInfo:nil]; 

Les boutons peuvent être ajoutés via -addButtonWithTitle::

[a addButtonWithTitle:@"First"]; 
[a addButtonWithTitle:@"Second"]; 

Le code de retour indique quel bouton a été pressé:

- (void) alertDidEnd:(NSAlert *)a returnCode:(NSInteger)rc contextInfo:(void *)ci { 
    switch(rc) { 
     case NSAlertFirstButtonReturn: 
      // "First" pressed 
      break; 
     case NSAlertSecondButtonReturn: 
      // "Second" pressed 
      break; 
     // ... 
    } 
} 
+3

Mieux encore, commencer l'alerte comme une feuille sur la fenêtre qui contient le bouton de suppression . De cette façon, l'utilisateur peut continuer à utiliser toutes les autres fenêtres de votre application. –

+0

Wow son fonctionnement bien.Mais comment mettre plus de boutons dans cette alerte et comment obtenir les événements de boutons – mikede

+1

@mik: En utilisant ['-addButtonWithTitle:'] (http://developer.apple.com/mac/library/ documentation/cacao/conceptuel/Dialog/Tasks/UsingAlerts.html). Il y a aussi un [special on alerts] (http://developer.apple.com/mac/library/documentation/cocoa/conceptual/Dialog/Tasks/UsingAlerts.html) dans les documents qui devraient vous aider. –

6

Long temps est écoulé depuis la réponse acceptée et les choses ont changé:

  • Swift devient de plus en plus populaire.
  • beginSheetModalForWindow(_:modalDelegate:didEndSelector:contextInfo:) est déprécié, nous devrions utiliser beginSheetModalForWindow:completionHandler: à la place.

Dernier exemple de code à Swift:

func messageBox() { 
    let alert = NSAlert() 
    alert.messageText = "Do you want to save the changes you made in the document?" 
    alert.informativeText = "Your changes will be lost if you don't save them." 
    alert.addButtonWithTitle("Save") 
    alert.addButtonWithTitle("Cancel") 
    alert.addButtonWithTitle("Don't Save") 
    alert.beginSheetModalForWindow(window, completionHandler: savingHandler) 
} 

func savingHandler(response: NSModalResponse) { 
    switch(response) { 
    case NSAlertFirstButtonReturn: 
     println("Save") 
    case NSAlertSecondButtonReturn: 
     println("Cancel") 
    case NSAlertThirdButtonReturn: 
     println("Don't Save") 
    default: 
     break 
    } 
} 

Si vous voulez une version synchrone:

func messageBox() { 
    let alert = NSAlert() 
    alert.messageText = "Do you want to save the changes you made in the document?" 
    alert.informativeText = "Your changes will be lost if you don't save them." 
    alert.addButtonWithTitle("Save") 
    alert.addButtonWithTitle("Cancel") 
    alert.addButtonWithTitle("Don't Save") 
    let result = alert.runModal() 
    switch(result) { 
    case NSAlertFirstButtonReturn: 
     println("Save") 
    case NSAlertSecondButtonReturn: 
     println("Cancel") 
    case NSAlertThirdButtonReturn: 
     println("Don't Save") 
    default: 
     break 
    } 
} 
+0

Vous avez sauvé ma journée! – cmcromance

Questions connexes