質問

私は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:] 代わりは。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top