NSOpenPanel setAllowedFileTypes
У меня есть 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];
}
Я надеюсь, что у Someboby есть решение.
2 ответа
Пара вещей, которые я заметил.. изменить setCanChooseDirectories
в NO. Если этот параметр включен, это означает, что папки являются допустимыми. Скорее всего, это не та функциональность, которую вы хотите. Вы также можете изменить разрешенные типы файлов на [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:]
вместо.