我有一个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];
}

我希望某些人有解决方案。

有帮助吗?

解决方案

我注意到的几件事。 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)
    }
}

其他提示

您非常接近答案。

首先,摆脱 [panel setCanChooseDirectories:YES] 因此,它不允许因此允许目录。

然后,要么更改[panel runModalForTypes:nil][panel runModal] 或摆脱电话 [panel setAllowedFileTypes:] 并将阵列传递给 [panel runModalForTypes:] 反而。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top