Reputation: 3370
I'd like to make something like this NSAlert
:
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!
Upvotes: 15
Views: 6525
Reputation: 3212
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"
Upvotes: 0
Reputation: 17481
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
Upvotes: 20