NSOpenPanel setAllowedFileTypes
-
28-09-2019 - |
Frage
Ich habe einen NSOpenPanel. Aber ich will es PDF-Dateien nur wählbar machen. Ich suche nach etwas wie folgt aus:
// 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];
}
Ich hoffe, hat someboby eine Lösung.
Lösung
Ein paar Dinge bemerkte ich .. Änderung setCanChooseDirectories
to NO. Wenn diese Funktion aktiviert dies zeigt, dass Ordner gültige Eingabe sind. Dies ist wahrscheinlich nicht die Funktionalität, die Sie wollen. Vielleicht möchten Sie auch Ihre erlaubte Dateitypen [NSArray arrayWithObject:@"pdf", @"PDF", nil]
für Groß- und Kleinschreibung Systeme ändern. runModalForTypes
sollte das Array von Dateitypen sein. Ändern Sie den Code wie folgt aussehen:
// 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)
}
}
Andere Tipps
Sie sind sehr nah an die Antwort.
Als erstes werde [panel setCanChooseDirectories:YES]
befreien, so dass es Verzeichnisse als Ergebnis wird nicht zulassen.
Dann wird entweder change[panel runModalForTypes:nil]
zu [panel runModal]
oder loszuwerden des Anrufs [panel setAllowedFileTypes:]
und übergeben Sie das Array [panel runModalForTypes:]
statt.