強火で進め

このブログではプログラム関連の記事を中心に書いてます。

ほぼ日、MacのGUI - SavePanel(2)(保存するファイル名の指定、シートセーブパネル)

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

ソースコードこちら