Вопрос

I'd like to make something like this NSAlert:
enter image description here

As you can see, the 'return' button is the second one. How can I do this?
Here's an example of the code that I use to create my NSAlert, but the first button gets the focus:

NSAlert *alert = [[NSAlert alloc] init];
[alert setMessageText:@"Are you sure you want to disconnect?"];
[alert addButtonWithTitle:@"Disconnect"];
[alert addButtonWithTitle:@"Cancel"];
[alert runModal];

I want to focus the "Cancel" button. Any ideas? Thanks!

Это было полезно?

Решение

To change the key equivalents for the NSButton elements inside of the NSAlert object, you'll have to access the buttons directly (after creation and before -runModal) and change the key equivalents using the -setKeyEquivalent: method.

For example, to set the Disconnect to be ESC and the Cancel to be return, you would do the following:

NSArray *buttons = [alert buttons];
// note: rightmost button is index 0
[[buttons objectAtIndex:1] setKeyEquivalent: @"\033"];
[[buttons objectAtIndex:0] setKeyEquivalent:@"\r"];

before calling -runModal

Другие советы

Swift 4

let alert = NSAlert()
alert.messageText = question
alert.informativeText = text
alert.alertStyle = .critical
let deleteButton = alert.addButton(withTitle: "Delete")
let cancelButton = alert.addButton(withTitle: "Cancel")
deleteButton.keyEquivalent = ""
cancelButton.keyEquivalent = "\r"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top