NSWindowを持たないステータスアイテムアプリを書いています。ユーザーがステータス項目をクリックしたときにNSOpenPanelをプルアップします。アプリがNSWindowを利用しない場合、これをどのように行うのでしょうか?
ありがとう。
NSWindowを持たないステータスアイテムアプリを書いています。ユーザーがステータス項目をクリックしたときにNSOpenPanelをプルアップします。アプリがNSWindowを利用しない場合、これをどのように行うのでしょうか?
ありがとう。
シートではなくモーダルウィンドウとして実行します。
ステータスアイテムのIBActionメソッドで、次のように呼び出します。
window = [[NSApp currentEvent] window];
次に、そのウィンドウをNSOpenPanelのbeginSheetModalForWindow:completionHandler:に渡して、開いているパネルをシートとして表示できます。
シートが表示されると、ステータスアイテム自体が丸まって消えることがありますが、シートを閉じると再び表示されます。
NSMenuItemのアクションから、開いているパネルを次のように呼び出すことができます。
NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setAllowsMultipleSelection:YES];
[panel setCanChooseDirectories:YES];
NSUInteger result = [panel runModal];
NSMutableArray *paths = [NSMutableArray array];
if(result == NSFileHandlingPanelOKButton) {
for (NSURL *url in [panel URLs]) {
NSLog(@"%@", url);
}
}