nsopenpanel setallowedfiletypes
-
28-09-2019 - |
質問
私はnsopenpanelを持っています。しかし、私はそれをPDF-Filesを選択可能にするだけにしたいです。私はそのようなものを探しています:
// NOT WORKING
NSOpenPanel *panel;
panel = [NSOpenPanel openPanel];
[panel setFloatingPanel:YES];
[panel setCanChooseDirectories:YES];
[panel setCanChooseFiles:YES];
[panel setAllowsMultipleSelection:YES];
[panel setAllowedFileTypes:[NSArray arrayWithObject:@"pdf"]];
int i = [panel runModalForTypes:nil];
if(i == NSOKButton){
return [panel filenames];
}
Somebobyに解決策があることを願っています。
解決
私が気づいたいくつかのこと..変更 setCanChooseDirectories
いいえ。有効になった場合、これはフォルダーが有効な入力であることを示します。これはおそらくあなたが望む機能ではありません。許可されたファイルタイプをに変更することもできます [NSArray arrayWithObject:@"pdf", @"PDF", nil]
ケースに敏感なシステム用。 runModalForTypes
ファイルタイプの配列である必要があります。このように見えるようにコードを変更してください:
// WORKING :)
NSOpenPanel *panel;
NSArray* fileTypes = [NSArray arrayWithObjects:@"pdf", @"PDF", nil];
panel = [NSOpenPanel openPanel];
[panel setFloatingPanel:YES];
[panel setCanChooseDirectories:NO];
[panel setCanChooseFiles:YES];
[panel setAllowsMultipleSelection:YES];
[panel setAllowedFileTypes:fileTypes];
int i = [panel runModal];
if(i == NSOKButton){
return [panel URLs];
}
Swift4.2:
let fileTypes = ["jpg", "png", "jpeg"]
let panel = NSOpenPanel()
panel.canChooseFiles = true
panel.canChooseDirectories = false
panel.allowsMultipleSelection = false
panel.allowedFileTypes = fileTypes
panel.beginSheetModal(for: window) { (result) in
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
// Do something with the result.
let selectedFolder = panel.urls[0]
print(selectedFolder)
}
}
他のヒント
あなたは答えに非常に近いです。
まず、取り除きます [panel setCanChooseDirectories:YES]
結果としてディレクトリを許可しないように。
次に、どちらかを変更します[panel runModalForTypes:nil]
に [panel runModal]
または、通話を取り除きます [panel setAllowedFileTypes:]
そして、配列を渡します [panel runModalForTypes:]
代わりは。
所属していません StackOverflow