Using Custom Sheets
One type of sheet is an alert sheet, which was discussed in “Using Alert Sheets.” If the type of information presented in alert sheets is not suitable for your application, you can create and present a custom sheet.
When working with custom sheets, you are responsible for displaying as well as dismissing the sheet. You display a sheet with the
beginSheet:... method, and you end a sheet with the
endSheet: method. Between these two methods, your sheet is operating modally.
You create your custom sheet using Interface Builder. It is important to remember to include a button to allow the user to dismiss the sheet when they are finished with it.
This discussion assumes that the sheet is in a separate nib file called
MyCustomSheet. A Close button is defined on the sheet. The Close button is set to perform the
closeCustomSheet: method when clicked.
showCustomSheet: method displays the custom sheet modal to the window passed as a parameter. The arguments to
beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo: are similar to those for the
NSBeginAlertSheet function, but the Close button on the custom sheet controls dismissing the sheet. A did-end selector is specified to handle any activity necessary before dismissing the sheet.
Listing 1 Displaying a custom sheet
- (void)showCustomSheet: (NSWindow *)window
// User has asked to see the custom display. Display it.
//Check the myCustomSheet instance variable to make sure the custom sheet does not already exist.
[NSBundle loadNibNamed: @"MyCustomSheet" owner: self];
[NSApp beginSheet: myCustomSheet
// Sheet is up here.
// Return processing to the event loop
When the user clicks the Close button, the following method is executed (this was specified in the nib file when creating the sheet).
Listing 2 Closing a custom sheet
- (IBAction)closeMyCustomSheet: (id)sender
Control is sent to the did-end selector, which cleans up by closing the custom sheet. It is important to call
orderOut: when finished with your sheet, or it is not removed from the screen.
Listing 3 Did-end selector
- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo