強火で進め

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

ほぼ日、MacのGUI - OpenPanel(2)(開くファイルの指定、シートオープンパネル)

NSOpenPanelのシートオープンパネルのサンプルです。
runModalForTypes: メソッドを実行した場合は独立したパネルとして表示されますが今回使用する beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo: メソッドは親ウィンドウにくっついた状態で表示されます。

ほとんどこちらで解説した runModalForTypes: メソッドを実行した場合と同様の記述となります。

主な処理は以下の様になります。

- (IBAction)pushButton:(id)sender;
{
	NSOpenPanel* openPanel;
	NSArray *fileTypes = [NSArray arrayWithObjects:@"txt", nil]; // 開けるファイルを拡張子で制限する
	
	openPanel = [NSOpenPanel openPanel];
	
	[openPanel beginSheetForDirectory:@"" file:@"" types:fileTypes modalForWindow:[sender window] modalDelegate:self 
				   didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) contextInfo:NULL];	
}

- (void)openPanelDidEnd:(NSOpenPanel *)panel returnCode:(NSInteger)code contextInfo:(void *)userInfo {
	if (code == NSOKButton) {
		NSLog(@"OKボタンが押されました\n");
		NSLog(@"選択ディレクトリ : %@\n", [panel directory]);
		NSLog(@"選択ファイル : %@\n", [panel filename]);
	}
	else if (code == NSCancelButton) {
		NSLog(@"Cancelボタンが押されました\n");
	}
}

公式の解説はこちら。

NSOpenPanel Class Reference
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSOpenPanel_Class/Reference/Reference.html

日本語の解説が良い人はこちらのSatoshi Oomoriさんのページを参照下さい。

http://www.oomori.com/cocoafw/ApplicationKit/NSOpenPanel/index.html
※注記
http://www.oomori.com/cocodesu/index.html

ソースコードこちら