Подтвердить что ты не робот

Как реализовать окно сообщения в приложении Cocoa?

Я реализовал функцию удаления в приложении cocoa, теперь я хочу показать одно окно сообщения, когда пользователь нажимает кнопку удаления.

4b9b3361

Ответ 1

Взгляните на NSAlert, который имеет синхронный -runModal:

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

Как упоминает Питер, лучшей альтернативой является использование предупреждения в качестве модального листа в окне, например:

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

Кнопки могут быть добавлены через -addButtonWithTitle::

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

Код возврата сообщает вам, какая кнопка была нажата:

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

Ответ 2

Длительное время прошло с момента принятия принятого ответа, и все изменилось:

  • Swift становится все более популярным.
  • beginSheetModalForWindow(_:modalDelegate:didEndSelector:contextInfo:) устарел, вместо этого следует использовать beginSheetModalForWindow:completionHandler:.

Последний образец кода в 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
    }
}

Если вам нужна синхронная версия:

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
    }
}