NSSavePanelのシートオープンパネルのサンプルです。
runModal: メソッドを実行した場合は独立したパネルとして表示されますが今回使用する beginSheetForDirectory:file:modalForWindow:modalDelegate:didEndSelector:contextInfo: メソッドは親ウィンドウにくっついた状態で表示されます。
[savePanel setRequiredFileType:@"txt"];
setRequiredFileType:メソッドの引数で拡張子を指定すると、拡張子が付加されたファイル名が返されます。
主な処理は以下の様になります。
- (IBAction)pushButton:(id)sender; { NSSavePanel* savePanel; savePanel = [NSSavePanel savePanel]; // 設定するとファイル名にここで指定した拡張子が付加されます [savePanel setRequiredFileType:@"txt"]; [savePanel beginSheetForDirectory:@"" file:@"" modalForWindow:[sender window] modalDelegate:self didEndSelector:@selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo:NULL]; } - (void)savePanelDidEnd:(NSSavePanel *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo { if (returnCode == NSOKButton) { NSLog(@"OKボタンが押されました\n"); NSLog(@"選択ディレクトリ : %@\n", [sheet directory]); NSLog(@"選択ファイル : %@\n", [sheet filename]); } else if (returnCode == NSCancelButton) { NSLog(@"Cancelボタンが押されました\n"); } }
公式の解説はこちら。
NSSavePanel Class Reference
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSSavePanel_Class/Reference/Reference.html
日本語の解説が良い人はこちらのSatoshi Oomoriさんのページを参照下さい。
http://www.oomori.com/cocoafw/ApplicationKit/NSSavePanel/index.html
※注記
http://www.oomori.com/cocodesu/index.html