Cocoaサンプル - ファイルダイアログ
※注意:以下紹介するサンプルはMacOSX10.6以降対応ですので注意してください。
サンプル例:
# Fileメニュー>Openを選択するとファイル選択ダイアログが表示され、 Openボタンを押すと選択したファイルパスをコンソールに表示する。 Cancelを押すと何も行わない。txtファイルのみ選択することができる。 # Fileメニュー>Save Asを選択して保存ファイル名を入力するとファイル選択ダイアログが表示され、 Saveボタンを押すと選択したファイルパスをコンソールに表示する。 Cancelを押すと何も行わない。txtファイルのみ選択することができる。
CocoaアプリケーションプロジェクトにFileDialogControllerクラスを追加します。FileDialogControllerにはOpen, SaveAsメニュー選択時のActionを定義します。
Actionの定義とViewとの接続
FileDialogController.h
#import <Foundation/Foundation.h> @interface FileDialogController : NSObject - (IBAction)onSelectSaveAs:(id)sender; - (IBAction)onSelectOpen:(id)sender; @end
MainMenu.xibにFileDialogControllerオブジェクトを追加、Recived Actions>onSelectSaveAsとSaveAsメニュー、onSelectOpenとOpenメニューを接続します。
実装
FileDialogController.m
- (IBAction)onSelectSaveAs:(id)sender { NSSavePanel *savePanel = [NSSavePanel savePanel]; NSArray *allowedFileTypes = [NSArray arrayWithObjects:@"txt",@"'TEXT'",nil]; // NSSavePanel interface has changed since Mac OSX v10.6. [savePanel setAllowedFileTypes:allowedFileTypes]; NSInteger pressedButton = [savePanel runModal]; if( pressedButton == NSOKButton ){ // get file path (use NSURL) NSURL * filePath = [savePanel URL]; // save file here NSLog(@"file saved '%@'", filePath); }else if( pressedButton == NSCancelButton ){ NSLog(@"Cancel button was pressed."); }else{ // error } } - (IBAction)onSelectOpen:(id)sender { NSOpenPanel *openPanel = [NSOpenPanel openPanel]; NSArray *allowedFileTypes = [NSArray arrayWithObjects:@"txt",@"'TEXT'",nil]; // NSOpenPanel interface has changed since Mac OSX v10.6. [openPanel setAllowedFileTypes:allowedFileTypes]; NSInteger pressedButton = [openPanel runModal]; if( pressedButton == NSOKButton ){ // get file path NSURL * filePath = [openPanel URL]; // open file here NSLog(@"file opened '%@'", filePath); }else if( pressedButton == NSCancelButton ){ NSLog(@"Cancel button was pressed."); }else{ // error } }
パネルを表示するにはrunModal、ファイルタイプを制限するにはsetAllowedFileTypesメソッドに拡張子の文字列配列を渡します。ちなみにファイルが存在するディレクトリのパスはdirectoryURLメソッドで取得できます。