views:

803

answers:

3

I need to make a Cocoa radio button programatically, can anyone explain how this might be done or post a good link that shows how to do this well.

+4  A: 

Taken from here:

Radio buttons are in fact a matrix if button cells. The exclusive selectivity is a property of the matrix.

To programmatically create a matrix of button cells you do exactly the same operations programmatically that IB does as the result of your input. e.g. Create an NSMatrix instance, set its cell prototype to an NSButtonCell, set that attributes of the matrix via its public methods (the same ones IB uses), and set the attributes of the prototype button cell and or all of the contained button cells.

Also see this link for more sample code on how to make an NSMatrix programatically.

fbrereto
+2  A: 

The NSButton Class reference is here

Button programming topics, specifically Radio Button (with sample code) can be found here

ctshryock
+2  A: 

Here's a sample code for creating radio buttons programatically:

//create the radio button prototype
NSButtonCell *proto = [[NSButtonCell alloc] init];
[proto setTitle:@"Options"];
[proto setButtonType: NSRadioButton];

//define the matrix size where you'll put the radio buttons
NSRect matrixRect = NSMakeRect(20.0,20.0,125.0,125.0);

//define the matrix specifying that it will contain radio buttons of
//prototype "proto" defined above, and that it will have 3 radio buttons 
//arranged on 1 column
NSMatrix *matrix = [[NSMatrix alloc] initWithRect: matrixRect
                                     mode: NSRadioModeMatrix
                                     prototype: (NSCell *)proto
                                     numberOfRows:3 numberOfColumns:1];

//this assumes that you connected the window object to an outlet
[[windowOutlet contentView] addSubview: matrix];

//set the radio buttons' titles by getting references to the matrix's cells
NSArray *cells = [matrix cells];
[[cells objectAtIndex:0] setTitle:@"Option 1"];
[[cells objectAtIndex:1] setTitle:@"Option 2"];
[[cells objectAtIndex:2] setTitle:@"Option 3"];

[proto release];
[matrix release];

Have fun! Yes, this is taken from here, but i added some personal comments to explain the process.

Woofy