Question

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!

Was it helpful?

Solution

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

OTHER TIPS

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"
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top