objective-cmacoscocoansalert

How to make the NSAlert's 2nd button the return button?


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!


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