2010-05-27 14 views

Antwort

41

Werfen Sie einen Blick auf NSAlert, die eine synchrone -runModal Methode hat:

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

Wie Peter erwähnt, eine bessere Alternative ist die Warnung as a modal sheet auf dem Fenster zu verwenden, zB:

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

Tasten können über -addButtonWithTitle::

[a addButtonWithTitle:@"First"]; 
[a addButtonWithTitle:@"Second"]; 
hinzugefügt werden 210

Der Rückgabecode zeigt Ihnen, welche Taste gedrückt wurde:

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

Noch besser, beginnen die Warnung als ein Blatt auf dem sich öffnenden Fenster auf die Schaltfläche Löschen enthält . Auf diese Weise kann der Benutzer weiterhin beliebige andere Fenster in Ihrer Anwendung verwenden. –

+0

Wow, es funktioniert gut.Aber wie man mehr Tasten in diesem Alarm und wie man diese Tasten Ereignisse – mikede

+1

@mik: Mit Hilfe von ['-addButtonWithTitle:'] (http://developer.apple.com/mac/library/ Dokumentation/Kakao/Konzept/Dialog/Aufgaben/UsingAlerts.html). In den Dokumenten, die Ihnen helfen sollten, gibt es auch ein [special on alerts] (http://developer.apple.com/mac/library/documentation/cocoa/conceptual/Dialog/Tasks/UsingAlerts.html). –

6

Lange Zeit hat sich seit der akzeptierte Antwort vergangen und die Dinge geändert haben:

  • Swift wird mehr und mehr populär.
  • beginSheetModalForWindow(_:modalDelegate:didEndSelector:contextInfo:) ist veraltet, sollten wir stattdessen beginSheetModalForWindow:completionHandler: verwenden.

Neueste Codebeispiel in 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 
    } 
} 

Falls Sie eine synchrone Version:

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

Du hast meinen Tag gerettet! – cmcromance

Verwandte Themen