16

NSOpenPanelを持っています。ただし、PDFファイルのみを選択できるようにしたい。私はそのようなものを探しています:

// 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];
}

誰かが解決策を持っていることを願っています。

4

2 に答える 2

34

私が気づいたいくつかのこと..NOに変更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];
}

Swift 4.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)
    }
}
于 2010-11-27T22:24:26.203 に答える
2

あなたは答えに非常に近いです。

まず、[panel setCanChooseDirectories:YES]結果としてディレクトリを許可しないように削除します。

次に、に変更[panel runModalForTypes:nil]する[panel runModal]か、への呼び出しを削除して、代わり[panel setAllowedFileTypes:]に配列をに渡し[panel runModalForTypes:]ます。

于 2010-11-27T22:24:56.723 に答える